如何在对大文本值进行小编辑时有效地使用gettext PO文件

Mal*_*olm 8 diff gettext internationalization

寻找有关如何在对大型msgid值进行小编辑时有效使用gettext PO文件的提示和/或工具.

示例:我们有许多存储在PO消息目录文件中的多句/多段消息.如果我们对一条消息做了一个非常小的改动,也许编辑一个句子甚至纠正标点符号,我们在运行msgmerge实用程序时会丢失原始翻译.

我们的译员不是从头开始重新翻译长消息(已经通过编辑审批流程),而是返回其PO文件的备份副本,并手动搜索最后一个msgid/msgstr翻译对的文本当前的msgid值以查看已更改的内容,然后复制并粘贴最后一个转换,然后编辑它们以反映更新的msgid值.

这是很多工作!当然必须有更好的方法来处理这种类型的工作流程?

有没有一种最佳实践的方式归档和发现以前的翻译不再在PO文件?我想到的一个想法是存储唯一的MSG ID在我们的信息的文本或在我们之前的消息,并使用这个ID来检索审查以前MSGID/msgstr翻译对的意见.或者是否有PO编辑或在线服务使这一过程更有效率?

谢谢你,马尔科姆

小智 9

我一直在寻找一种方法来对msgids进行微小的更改,而不会干扰现有的翻译 - 例如,源文本中的拼写错误修复.这是我刚刚制定的不涉及网站的方法:

  1. 使用msgenGNU gettext生成英语到英语的po文件:

    msgen project.pot >corrections.po

  2. 手动编辑msgstr"corrections.po"中的s以反映源文本中的拼写错误修复,因此我们有从未修正的字符串到更正的字符串的映射.(我没想过如何自动化这一点.)

  3. 对于每个"真实"翻译(例如ca.po):poswap来自Translate Toolkit(translate-toolkit在Ubuntu中)的滥用来更改msgids:

    poswap -i corrections.po -t ca.po -o ca.new.po

这似乎从GNU gettext po文件中丢失了标题注释和过时的字符串,但手动修复它们比在每次翻译中手动调整msgids(并且可能很容易编写脚本)要少得多.

(显然,这应该仅用于特殊情况,在这种情况下,您绝对不能确保所有翻译人员都没有机会重新审阅他们的翻译.)


Wal*_*ter 5

Virtaal的翻译记忆库支持可能对此有所帮助.如果您的原始单位在翻译记忆库中,它将在一定的变化范围内(基于Levenshtein距离)显示(有差异).它仍将包含原始(未修改)的翻译,但至少原始文本更容易访问,并突出显示差异.

我不是百分百肯定,但Pootle也可能提供基于网络的解决方案.如果您需要任何帮助,请在FreeNode上的#pootle中询问.

当然,更普遍的改进是尽可能地分离/分割单元.