2011-11-27 53 views
6

使用gettext,消息的原始(通常是英文)文本用作翻译的消息密钥(“msgid”) 。这意味着每次 原始文本更改时,必须在所有.po文件中更新msgid。我可以自动更新gettext的.po文件中的msgids以进行微不足道的文本更改吗?

对于文本的真实更改,这显然是不可避免的,因为翻译器必须更新翻译。

但是,如果原件的更改没有改变其含义, 重新翻译是superflous(例如更改标点符号,空白 更改或纠正拼写错误)。

有没有办法在这种情况下自动更新.po文件?

我试过了xgettext & msgmerge使用(与模糊匹配开启),但 模糊匹配有时会失败,再加上这将产生大量的丑陋 “#,模糊”的标志。

:有一个类似的问题: How to efficiently work with gettext PO files when making small edits to large text values 然而,它是关于大串,因此一个更具体的问题。

+0

感谢引用类似的问题礼貌;我同意,也许有不同的答案,不会在重复的警察玩 - 但我会说,http://stackoverflow.com/a/3798064/179583似乎也适用于此。 – natevw

回答

2

避免此问题的一种方法是单独保留msgids,为原始语言创建一个.po文件并在其中进行修复。

它总是让我感到更多的是解决问题而不是正确的解决方法。对于下一次迭代(肯定会有更多的msgid更改),将更改msgid,并且翻译人员会按照其正常更新翻译它,或者在更改msgid时手动更新每种语言。

2

我在对django项目进行微小更改时遇到了这个问题。我做的是以下几点:

  1. 在代码中更改消息。
  2. 运行查找并替换所有翻译文件(“django.po”),用新的替换旧的消息(msgid)。
  3. 运行django-admin makemessages。

如果我已经做对了,最后一步是超快的(即,你已经完成了对gettext的更改)。 django使用gettext实用程序,因此应该如何制作消息文件无关紧要。

我查找和替换像这样: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g'http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

+1

是的,使用搜索和替换是另一个明显的解决方案(与dsas使用固定msgids的解决方案一起)。但是,如果您需要复制msgids(在多个位置使用原始字符串,并且仅进行一些更改),则搜索和替换可能会非常复杂,如果某些msgids是其他子字符串,或者也作为翻译的一部分出现。所以这不是一个通用的解决方案。 – sleske

相关问题