Mudlet: 为 Mudlet 设置基于 Web 的翻译服务

创建于 2017-04-09  ·  45评论  ·  资料来源: Mudlet/Mudlet

我们需要让人们为翻译 Mudlet 做出贡献变得超级容易——这意味着基于 Web 的东西,唯一的障碍就是登录。可能有一个现有的基于 Web 的服务可以为我们提供一个开源许可证来进行设置.

可用的替代品:
Launchpad - 然而,它的未来值得商榷
Transifex - 这里的演示项目: https :

最有用的评论

Guys crowdin 试用版将在 4 天后到期,所以我需要同意/不同意 - 到目前为止,我们似乎对此感到满意

所有45条评论

有 POEditor 作为与 github 的集成,允许翻译 XLIFF
文件(据说由 qt 语言学家支持)。 他们有一个操作系统
执照。

另一个选择是 Qordoba,它似乎不需要任何成本,而且在本地
支持 ts 文件。

从未使用过任何翻译服务/应用程序,所以我没有偏好。

Vadim Peretokin [email protected] schrieb am So.,2017 年 4 月 9 日,
13:14:

我们需要让人们为翻译 Mudlet 做出贡献变得超级容易

  • 这意味着基于网络的东西,唯一的障碍就是登录。
    可能有一个现有的基于 Web 的服务可以为我们提供
    获取设置的开源许可证。

可用的替代品:
Launchpad https://translations.launchpad.net/ - 它的未来是
然而值得怀疑


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/Mudlet/Mudlet/issues/856 ,或将线程静音
https://github.com/notifications/unsubscribe-auth/ABAeDUJoAsg-zvnOq1YUvuIqn-fbRwcCks5ruL2WgaJpZM4M3_u1
.

回复:XLIFF _Qt 语言学家手册:Translators_ Qt Doc 注释:

__翻译字符串__
您在 Qt Linguist 中打开翻译源 (TS) 文件进行翻译。 TS 文件是人类可读的 XML 文件,其中包含源短语及其翻译。 TS 文件通常由 lupdate 创建和更新。 如果您没有 TS 文件,请参阅 Release Manager 以了解如何生成一个。
您还可以使用 Qt Linguist 翻译由其他程序生成的国际 XML 本地化交换文件格式 (XLIFF) 的文件。 但是,对于标准 Qt 项目,仅使用 TS 文件格式。 XLIFF 格式文件的最低支持版本是 1.1。

现在有基于网络的翻译平台,它们比桌面应用程序具有巨大的优势:无需安装任何软件,为已翻译的文本提供翻译建议等。

@SlySven我读过这篇文章,这就是我所说的原因。 它读起来像是不完全支持或事后才想到的,这就是我应该添加的原因(我从未测试过它)。

@vadi2我提到的产品是基于网络的平台。 但是您仍然需要使用 qt linguist 使这些平台的输出可供 Qt 翻译框架使用。 这也将我们绑定到支持的格式TS文件和XLIFF

我玩过 Linguist,据我所知,UI 非常好(我是粉丝 :heart_eyes :),它确实复制了 UI 对话{并显示了文本字符串源自 C++ 的源代码QStrings } 这样您就可以很好地了解它们在不同语言中的外观,并且您可以同时处理多个翻译。 我只是希望 Qt 更加严格,不会不必要地重新排序 TS 文件的内容,以在贡献者更新文件时降低 git 噪音 - 不像 .ui 文件中的QGridLayouts 。 *叹息*

至于需要使用 Qt Linguist - 我认为,由于我们通常使用 Qt 库,我们可能会致力于它(如 _Pig_ 而不是 _bacon-and-egg sarnie_ 中的 _Chicken_ 承诺级别),除了原生gettext我认为

听起来我有兴趣看到 Qt Linguist 导出到基于 Web 的东西,如果他们愿意,人们可以选择实时安装和预览他们的翻译。 我会看看你提到的@keneanung服务,它们看起来不错。

我也想到了 Transifex,但这似乎不再那么好了。

另一个网络翻译平台: https :

以下是 Mozilla 项目处理本地化和翻译的方式: https :

在这篇关于“自由软件翻译”的硕士研究论文中,对几种替代方案和一般过程进行了深入研究: https :

谢谢@Kebap ,我已经阅读了您链接的论文。 我对 Weblate 和 Transifex 很感兴趣 - 将检查它们。

我希望这有尽可能低的进入门槛,并且排除了基于桌面的翻译,人们必须下载和安装软件,然后在他们有机会开始工作之前四处寻找正确的文件。

Weblate 看起来不错并且是开源的,但它们的托管版本现在也已关闭 - 所有托管翻译(如 Tilix 项目)也是如此。 不好。 我也对在我们的服务器上托管更多东西持谨慎态度,因为它已经在极限运行了。

将尝试 Transifex 演示。 他们支持开源,而且他们似乎是一个更大的商店,与 Weblate 不同,目前倒闭的可能性要小得多。

话虽如此,如果 Weblates Git 集成确实有效,那么使用它会更好,因为它_应该_自动更新来自 Git 的新源文本,并可能将其提交回来。 另一方面,Transifex 要求我手动上传要翻译的文件。

虽然 Transifex 本身支持 .ts 文件,但它似乎在上传时卡住了。 使用ts2po并上传.po文件虽然有效。

看起来您可以使用一些中间件在 Transifex 和 Github 之间进行自动双向更新: https :

我能够从 Transifex 下载完整翻译的.po ,但po2ts因 Python 编码错误而阻塞文件:

po2ts: WARNING: Error processing: input ./for_use_mudlet_rupo_1_ru.po, output ./for_use_mudlet_rupo_1_ru.ts, template None: 'ascii' codec can't encode characters in position 1994-1999: ordinal not in range(128)

如果其他人愿意翻译@Kebap @keneanung,我会将 Transifex 项目留在https://www.transifex.com/mudlet/mudlet/dashboard 。 接下来将尝试 Weblate。

Weblate 很好——它有很多第三方登录选项,所以加入它真的很容易。

@vadi2 写道:

我能够从 Transifex 下载完整翻译的 .po,但 po2ts 因 Python 编码错误而阻塞文件:

我想我在某处读到他们的po2ts仅适用于.ts文件的旧规范并且需要更新(我猜在他们的末尾) - 我注意到它来自翻译工具包翻译 House Github 源代码,在撰写本文时,最新版本是 2.2.5(我不知道他们在使用什么)。 从另一个项目中找到了一个网页(不确定它是否基于 GitHub,但它们的整体过程似乎是我们必须做的事情: mixxx 国际化页面

实际上,“编码”错误听起来像是在尝试生成一个.ts文件,其中编码是 ASCII 而不是 UTF-8,所以在需要使用某些字符的地方(在 _translated_ 字符串中)不是ASCII...

该页面上次更新是四年前! 开发人员的流程已经结束
日期,我想。 这是一些令人印象深刻的翻译文档
尽管!

2017 年 9 月 19 日,星期二,下午 6:18,Stephen Lyons [email protected]写道:

@vadi2 写道:

我能够从 Transifex 下载完整翻译的 .po,
但是 po2ts 因 Python 编码错误而阻塞文件:

我想我在某处读到他们的 po2ts 版本只适用于旧版本
.ts 文件的规范和需要更新(我猜在他们的结尾) - 我
请注意,它来自翻译工具包
http://toolkit.translatehouse.org/来自 Translate House Github 源
代码https://github.com/translate/translate最新版本是
2.2.5(我不知道他们在使用什么)在撰写本文时。 找一个
来自另一个项目的网页(不确定它是否基于 GitHub,但
他们的整个过程似乎是我们必须做的事情:mixxx
国际化页面
https://mixxx.org/wiki/doku.php/internationalization


你收到这个是因为你被分配了。

直接回复此邮件,在 GitHub 上查看
https://github.com/Mudlet/Mudlet/issues/856#issuecomment-330592819或静音
线程
https://github.com/notifications/unsubscribe-auth/AAGxjEdeBPs-7fDkUwfoLjUt48eJJhl0ks5sj-lagaJpZM4M3_u1
.

Weblate 似乎并不处于有利位置。 我还没有收到我的托管应用程序的响应,并且该项目并没有通过更新获得太多。 回到 Transifex 就是这样。

关于如何使用 Qt 设置 Transifex 的提示: https :

https://bugreports.qt.io/browse/QTBUG-1136

最后,语言学家基本上是在维持生命——我们将土地让给了专门从事这一领域的独立软件开发商。

Qt Linguist 是一种死胡同的技术——它不会获得任何功能,所以我们必须在这里使用基于 Web 的平台。

既然 #1334 可用,我将研究如何启动和运行 Transifex 翻译。

重申一下我在 Kebap 的交叉引用中提到的,对于像我们这样的开源项目来说, crowdin看起来也是一个有效的选择——它们可以处理 Qt .ts文件并且还具有Github 集成——伪本地化功能也应该帮助我们防止 GUI 出现问题,因为我们没有正确地构造文本(我认为),并且肯定会帮助我们确保我们为字符串长度en-US语言留有足够的余地......

crowdin 看起来不错 - 让我们看看它与 Transifex 的比较,我在这里有一个测试项目。

@SlySven对代码进行修改以使 html 对翻译人员更好是为时过早 - 例如 transifex 已经很好地处理了 html 标记:

peek 2018-05-18 13-36

我想通了——crowdin 也有这个选项。 只需在编辑器标签设置中选择“隐藏”:

selection_143

这意味着我们不必再进行@SlySven一直在做的代码修改——我们可以在源字符串中按原样使用 HTML,编码人员和翻译人员都不会感到不便。

我很高兴@SlySven建议使用@crowdin进行翻译。 @Kebap@keneanung@SlySven你的想法?

一旦我们同意,我将在crowdin 上将项目更新为官方,申请开源许可证,然后我们开始向翻译人员宣传。

嘿,

我是 Crowdin 团队的一员,如有必要,我很乐意协助进一步设置! 如果出现任何问题,请随时提及我

我对crowdin也很好。 它的 UI 起初令人困惑,但我相信我们(我)会习惯它。

我承认我没有仔细研究过 Transifex,因为我在心理上考虑它,因为我知道它不能很好/直接处理当前的 Qt .ts格式 - 是改变了还是我不正确在那个信念?

我在最近的 git 提交中看到的关于 Crowdin 的一件事是,您正在上传多个.ts文件,这些文件已在本地配置为用于特定语言。 您现在已经通过仅发送一个mudlet_en.ts文件来修复它,但这对我来说似乎仍然不太正确。 您可能想要删除或注释掉mudlet.pro文件中的TRANSLATIONS =行,并拥有一个运行的 shell 脚本(在源代码的基础中):

lupdate -recursive ./src/ -ts ./translations/mudlet.ts

生成一个单一的、非语言特定的文件以传递给 Crowdin 翻译过程并让它生成我们想要的mudlet_xx_YY.ts文件(我已经更改了 Crowdin 上的一个设置以指定_xx_YY语言+语言环境后缀,它最初似乎被设置为只有_xx语言之一)。 这仍然会导致一文件被复制回同一个目录,准备好lrelease

顺便说一句,保留没有后缀的普通文件很有帮助,因为这意味着少数语言相关方可以复制并重命名它以私下工作,如果他们希望使用提供的 Qt Linguist 使用不同的、未发现的语言。 {例如,可能是 9 月 19 日的盗版!!!}

我认为我已经采取的 HTML 反混淆步骤似乎已经变得不那么必要了,因为 Qt Designer 插件在最后几个 Qt 版本中似乎变得不那么渴望破坏 HTML。 我还不完全相信它不会弄乱和改变事情,例如,强制使用最后一个编辑它的人在他们的系统中拥有的特定字体,而不是让它成为一个通用的字体可以在所有平台上工作。 我会再看一下并在这里报告,因为它会影响我们在工作中记录此类 HTML 的方式。

我承认我没有仔细研究过 Transifex,因为我在心理上考虑它,因为我知道它不能很好/直接处理当前的 Qt .ts 格式——这种情况发生了变化还是我的信念不正确?

我也是,看来它已经改变了: https :

我不打算使用 Qt Designer 插件,所以它所做的任何修改都无关紧要——crowdin 自己处理翻译的能力已经足够好了,而且它的“隐藏”样式的 HTML 渲染是可以容忍的。

哦,它还在做——插入表格和 DTD——所以,这更容易被人类阅读和解析,这个:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'FreeSans'; font-size:9pt; font-weight:400; font-style:normal;">
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:large; font-weight:600;">Welcome to Mudlet!</span></p>
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Click on one of the MUDs on the list to play.</p>
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To play a game not in the list, click on <img src=":/icons/list-add_small.png" /><span style=" color:#555753;">New</span>, fill in the <span style=" font-style:italic;">Profile Name</span>, <span style=" font-style:italic;">Server address</span>, and <span style=" font-style:italic;">Port</span> fields in the <span style=" font-style:italic;">Required</span> area.</p>
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">After that, click <img src=":/icons/dialog-ok-apply_small.png" /><span style=" color:#555753;">Connect</span> to play.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Have fun!</p>
<p align="right" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The Mudlet Team <img src=":/icons/mudlet_main_16px.png" /></p></body></html>

或者这个,就我们而言,它的作用相同:

<html><head/><body><center><big><b>Welcome to Mudlet!</b></big></center></p>
<p><center>Click on one of the MUDs on the list to play.<center></p>
<p><center>To play a game not in the list, click on <img src=":/icons/list-add_small.png"/> <span style="color:#555753;">New</span>, fill in the <i>Profile Name</i>, <i>Server address</i>, and <i>Port</i> fields in the <i>Required</i> area.<center></p>
<p><center>After that, click <img src=":/icons/dialog-ok-apply_small.png"/> <span style=" color:#555753;">Connect</span> to play.</center></p>
<p>Have fun!</p>
<p align="right">The Mudlet Team <img src=":/icons/mudlet_main_16px.png"/></p></body></html>

从技术上讲,这都是 Qt 富文本,它只是 HTML 的一个子集(那么为什么要强制包含严格的 HTML 4.0 DTD?)

即使在翻译人员将看到的原始文件中显示<>而不是&lt;&gt; ,我认为很清楚哪个会在没有 HTML/Qt 富文本显示小部件的情况下更容易使用...

我想我在某处读到 CJK 语言确实不应该使用粗体斜体字体效果(相反我认为它们在字形的一个边缘使用相当于点重音) - 所以在这些情况下,标记可能涉及翻译过程...

运行 shell 脚本是不可移植的(对于 Windows),所以我宁愿不这样做。 当前的mudlet_en.ts文件似乎运行良好?

现在是星期五,所以让我们在接下来的几天内对此做出结论,以便我们可以开始下一步,我认为应该是:

1) 翻译人员报告混淆字符串的流程——如果翻译人员无法理解,我们的用户很可能也不会
2) 实际的翻译过程以及它如何与我们的工作流程配合使用

我建议首先考虑更多我们需要的过程的细节,然后才决定哪种工具最适合它们。

据我现在所见,我们有几个不同的主要文本来源:

  • Mudlet 客户端本身
  • Mudlet 网站
  • Mudlet 维基
  • 需要手动包含“其他”自发文本

然后每个流程都大同小异,但需要单独审查:

  • 从需要翻译的相关当前文本中找出一种方法来区分过时的文本。
  • 从来源中获取文本(见上文)。 这可以用任何工具自动化吗? 谁应该负责?
  • 将文本输入翻译工具。
  • 翻译内部工具(好的,这是可以预料的,但也需要良好的界面和工作流程)
  • 翻译人员向 Mudlet 团队报告令人困惑的字符串,并提供需要如何调整的信息。
  • Mudlet 团队更新源中的文本。 要么是因为报道,要么是因为自然进化。
  • 来自源的更新文本需要在翻译工具中更新。 再次导出和导入,加上差异。
  • 翻译文本将完成。 从翻译工具中导出它们。 再次自动化?
  • 将翻译后的文本导入源。
  • 在源中显示翻译。 在这里,我们需要在每个源中使用某种语言切换开关。

我注意到一些用于 Wordpress和 Mediawiki 的

我希望上述所有步骤的自动化程度最高,并选择最能支持的工具。

就源代码/对话(表单)而言:

  • 从需要翻译的相关当前文本中找出一种方法来区分过时的文本。
  • 从来源中获取文本(见上文)。 这可以用任何工具自动化吗? 谁应该负责?

    • 两者都是使用lupdate命令完成的,该命令从源代码中提取源文本并添加/更新它们的记录 - 我认为应该是语言中立的mudlet.ts文件(当前的mudlet_en.ts向某些方面表明它专门保存英语翻译 - 而 - 我们将如何使用它作为源代码 ==> Crowdin 日期传输媒介它将用于除英语(美国) 情况。如果使用--no-obsolete选项调用,则不会删除现有但现在已消失的字符串 - 这是我们至少在开发阶段想要的。我建议为en-US 语言环境,因为这将是一个非常短的语言环境,它只包含复数形式的字符串,即我们会有源字符串的地方,例如“deleting %n room(s)”,因此,对于这种情况,“deleting 1 room”或使用“删除 2 个房间”。

  • 将文本输入翻译工具。

    • 更新开发分支的过程应该会导致上述情况发生,并且更新的.ts将从(我建议)linux CI 构建上传(因为我们最容易编写脚本)

  • 翻译内部工具(好的,这是可以预料的,但也需要良好的界面和工作流程)
  • 翻译人员向 Mudlet 团队报告令人困惑的字符串,并提供需要如何调整的信息。

    • 看起来crowdin允许任何人就任何至少对经理可见的源字符串发表评论或提出问题(但可能对更多方开放)

  • Mudlet 团队更新源中的文本。 要么是因为报道,要么是因为自然进化。

    • 包括源文本与预期的en_US 形式混淆或拼写错误的地方 - 例如,我可能使用了许可(en-GB名词,cf license 作为 en-GB动词),但对于这两种形式,它始终是 en-US 中的许可。

  • 来自源的更新文本需要在翻译工具中更新。 再次导出和导入,加上差异。

    • 重新运行lupdate - 但这应该通过“开发”分支更新上的 CI 脚本自然发生

  • 翻译文本将完成。 从翻译工具中导出它们。 再次自动化?

    • 我们中的一个mudlet_xx_YY.ts文件,然后 git 将它们提交到/translations目录 - 请记住,这些文件不会被lupdate更新只有复数形式的mudlet_en_US.ts one - 相反,它们是在 Crowdin 从mudlet.ts文件生成的。

  • 将翻译后的文本导入源。

    • 不完全是所需的,应用程序不会从.ts文件中读取翻译文本。 相反,一旦我修改并公开了代码,mudlet 应用程序将在运行时通过加载选定的mudlet_xx_YY.qm二进制文件(以及适当的 Qt 文件——我注意到我们已经与安装程序版本一起分发!)所以最初我想我们中的一个人将运行lrelease.ts文件转换为匹配的.qm文件并将它们提交到 git 存储库好。 最终,Vadim 建议我们将在发布版本中包含一组.qm文件作为资源文件。 这适用于安装程序版本,但 Linux 打包程序希望将它们存储在只读的/usr/share/mudlet/translations (与外部 Mudlet lua 文件一起)。 我有允许处理这两种安排的原型代码,但是通过允许用户从其他地方加载翻译文件(可能来自源代码中的/translations目录),它将允许独立开发翻译对于感兴趣的各方使用原始 Qt 工具Linguist其他少数语言 - 它还允许开发人员处理私有/测试用例。

  • 在源中显示翻译。 在这里,我们需要在每个源中使用某种语言切换开关。

    • 从使用QLangaugeEvent实验来看,它比我们需要的更复杂,因为它每次调用QQTranslator::load(...)时都会触发 - 我发现使用mudletemit更简单(void) signal_translatorChangeCompleted(const QString&, const QString&)当前和以前的xx_YY代码(语言国家/地区)的参数大部分未使用,除了 IIRC Host ,它为脚本生成 lua 事件/package 要使用的事件处理程序。 该信号被发送到具有持久 GUI 文本的每个类到slot_guiLanguageChange() ,它调用所需的retranslateUi(this) ,它在每个也使用setupUi(this)类中定义,前提是您设置了Qt IDE 中的选项正确(我不知道直接使用qmake时这是如何工作的):

      qt_options

      该调用将更改表单/对话中每个可翻译字符串的翻译,然后我们必须重新生成我们在运行时创建的所有 GUI 文本,同时考虑到可能导致不同文本放在一起的任何条件。 这并不像听起来那么糟糕,因为我们只需要更改持久性- 即存在很长时间 - 字符串,因为只要使用tr(...)来创建临时文本,它们就会自动使用新的翻译。

这不是我关于这个主题的全部内容,但我可以看到大多数步骤应该如何用于应用程序 GUI 文本......

感谢您提供这些详细信息 SlySven! 在我看来,也许你以前做过这个? 对于另一个应用程序? 与科尔丁? 这将使翻译 Mudlet 应用程序本身变得更加容易。

另一方面,对于 Mudlet 世界中的其他文本源,我们仍然有相同的问题,例如 wiki 文档、Mudlet 网站以及可能需要手动合并的其他文本,正如我在上面的上一篇文章中所解释的那样。

我还没有完全完成上面的答案,但是 Crowdin 有 Github 集成,它不考虑 - https://github.com/Mudlet/Mudlet/pull/1692是自动生成的 PR,我们不需要做任何手动上传或下载; 只需合并 PR。 因此,该过程将比描述的要简单一些!

Guys crowdin 试用版将在 4 天后到期,所以我需要同意/不同意 - 到目前为止,我们似乎对此感到满意

我很高兴!

你好! ;)

我已经尝试过https://crowdin.com/ ……翻译没问题,我不知道是否适合快速反馈、请求等……比如翻译或示例的“竞争化”……

那么crowdin的评论区呢?

嗨@Joker-ITA,

实际上有几种方法可以为翻译人员添加额外的上下文:

1) 在编辑器中,点击字符串下方的“Edit Context”,为译者提供更多信息;
2)您可以在编辑器中为任何字符串留下评论(在右侧面板上,输入您的评论);
3) 通过项目设置 -> 字符串选项卡为任何字符串添加上下文;
4) 我敢打赌,您有一些常规翻译人员可能无法理解的特定术语,因此创建一个词汇表并将其上传到 Crowdin 是有意义的。 更多信息。 它甚至可以是具有 2 列的 Excel 电子表格:术语和描述;
5) 如果您在文件中有注释(即 Android XML、iOS 字符串、.properties、.yml、Google Chrome JSON),它们将与文件一起自动导入;
6)您可以将屏幕截图上传到 Crowdin 并在其上标记任何字符串:https://support.crowdin.com/adding-screenshots/
7) 如果我们谈论 webapp l10n,尝试我们的In-Context功能以允许翻译人员直接在您的网站上进行翻译是有意义的。

这只是如何将文本上下文化以进行翻译的主要方法😄

@Kebap写道:

感谢您提供这些详细信息 SlySven! 在我看来,也许你以前做过这个? 对于另一个应用程序? 与科尔丁? 这将使翻译 Mudlet 应用程序本身变得更加容易。

只能手动使用 Qt 自己的工具(过去几年我在法国南部花了几个星期来研究细节)。 我们仍将使用其中的两个 - lupdatelrelease - 但我们正在替换 Qt Linguist (将翻译添加到存在于许多源文本中的工具.tslupdate为每次翻译生成的文件,在lrelease将它们转换为所需的语言/位置特定mudlet_xx_YY.qm文件之前 - 每种语言/位置翻译再一次提供)使用 Crowdin,它将采用单个mudlet.ts 文件并生成mudlet_xx_YY.ts文件。

使用linguist和我们将使用 Crowid 所做的一个重要区别是,我们可以在没有以下情况的情况下逃脱:

TRANSLATIONS =

Crowid 的项目文件中的行。

实际上,我认为我们将需要两个文件 - 所有语言环境的mudlet.ts将通过 Crowdin 进程和mudlet_en_US.ts将使用-pluralonly选项提取并且只有根据roomCount的值,一些翻译可以将tr("deleted %n room(s)", "", roomCount)类的消息转换为"deleted 1 room""deleted 2 rooms" roomCount ,并且可能真的可以由您自己完成...

太好了-我们要和 Crowdin 一起去 :)

我会像@SlySven建议的那样调整文件名,并在 Crowdin 中正确设置项目,以便人们可以开始翻译。 我们已经完成的任何现有测试翻译都将保存在事务内存中,因此重新应用它们将非常容易。

回答@Kebap的问题,考虑到@SlySven的回答:

  • 从需要翻译的相关当前文本中找出一种方法来区分过时的文本。

    • lupdate工具可以做到这一点

  • 从来源中获取文本(见上文)。 这可以用任何工具自动化吗? 谁应该负责?
  • 将文本输入翻译工具。

    • 我们手动运行lupdate并将它们提交给development - 这部分可以由 Travis 每天自动化

    • 由于 github 集成,crowdin 会自动获取它们

  • 翻译内部工具(好的,这是可以预料的,但也需要良好的界面和工作流程)

    • crowdin的翻译界面

  • 翻译人员向 Mudlet 团队报告令人困惑的字符串,并提供需要如何调整的信息。

    • 在crowdin写一个问题

  • Mudlet 团队更新源中的文本。 要么是因为报道,要么是因为自然进化。
  • 来自源的更新文本需要在翻译工具中更新。 再次导出和导入,加上差异。

    • crowdin 把它捡起来

  • 翻译文本将完成。 从翻译工具中导出它们。 再次自动化?

    • 是的,crowdin 自动打开一个 PR: https :

  • 将翻译后的文本导入源。
  • 在源中显示翻译。 在这里,我们需要在每个源中使用某种语言切换开关。

    • @SlySven会在这里变魔术 :)

有一个只有复数的单独翻译文件有什么需要?

此页面是否有帮助?
0 / 5 - 0 等级