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

时间:2010-06-03 12:47:44

标签: internationalization diff gettext

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

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

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

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

是否有最佳实践方法来存档和查找不再存在于PO文件中的先前翻译?想到的一个想法是在我们的消息文本或消息之前的注释中存储唯一的msg id,并使用此id来检索以前的msgid / msgstr转换对以供查看。或者是否有PO编辑或在线服务使这一过程更有效率?

谢谢你, 马尔科姆

2 个答案:

答案 0 :(得分:9)

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

  1. 使用GNU gettext中的msgen生成英语到英语的po文件:

    msgen project.pot >corrections.po

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

  3. 对于每个“真实”翻译(例如ca.po):滥用翻译工具包中的poswap(Ubuntu中为translate-toolkit)来更改msgids:

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

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

    (显然,这只应在特殊情况下使用,在这种情况下,您绝对确定没有翻译人员需要有机会重新审核其翻译。)

答案 1 :(得分:5)

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

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

当然,更普遍的改进是尽可能地分开/分割单位。