Internationalization 我可以在gettext';中自动更新msgids吗;s.po文件是否用于琐碎的文本更改?

Internationalization 我可以在gettext';中自动更新msgids吗;s.po文件是否用于琐碎的文本更改?,internationalization,translation,gettext,Internationalization,Translation,Gettext,使用gettext,消息的原始(通常为英文)文本用作 翻译的消息键(“msgid”)。这意味着每次 如果原始文本发生更改,则必须更新所有.po文件中的msgid 对于文本的真正变化,这显然是不可避免的,因为 译者必须更新译文 但是,如果原作的更改没有改变其含义, 重新翻译是超能力的(例如,点字、空格的变化 更改或纠正拼写错误) 在这种情况下,有没有办法自动更新.po文件 我尝试使用xgettext&msgmerge(启用模糊匹配),但是 模糊匹配有时会失败,再加上这会产生很多丑陋的结果 “#,模

使用gettext,消息的原始(通常为英文)文本用作 翻译的消息键(“msgid”)。这意味着每次 如果原始文本发生更改,则必须更新所有.po文件中的msgid

对于文本的真正变化,这显然是不可避免的,因为 译者必须更新译文

但是,如果原作的更改没有改变其含义, 重新翻译是超能力的(例如,点字、空格的变化 更改或纠正拼写错误)

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

我尝试使用xgettext&msgmerge(启用模糊匹配),但是 模糊匹配有时会失败,再加上这会产生很多丑陋的结果 “#,模糊”标志

注:有一个类似的问题:
但是,它是关于大字符串的,因此是关于一个更具体的问题。

避免该问题的一种方法是不使用msgid,为原始语言创建一个.po文件,并在其中进行修复


但我总是觉得这是一种变通,而不是一种适当的解决办法。在下一次迭代中(肯定会有更多的msgid更改),msgid会被更改,翻译人员会在他们通常的更新中翻译它,或者在msgid更改时手动更新每种语言。

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

  • 在代码中更改消息
  • 对所有翻译文件(“django.po”)运行find和replace,将旧消息(msgid)替换为新消息
  • 运行django admin makemessages
  • 如果我做对了,那么最后一步就是superflous(即,您已经为gettext做了更改)。django使用gettext实用程序,因此如何创建消息文件应该无关紧要

    我发现并替换如下:
    find-名称“*.po”-print | xargs sed-i's/oldmessageid/newmessageid/g'

    提供是的,使用搜索和替换是另一个显而易见的解决方案(与dsas使用固定MSGID的解决方案一起)。但是,如果某些msgid是其他msgid的子字符串,或者也作为翻译的一部分出现,或者需要复制msgid(在多个位置使用原始字符串,并且只有一些更改),则搜索和替换可能会变得非常复杂。所以这不是一个通用的解决方案。感谢您参考类似的问题;我同意可能有不同的答案,不会在重复的cop上玩-但是我会说这似乎也适用于此。这最终会导致更多的工作。您可以编辑原始语言的
    .po
    文件,然后在以后的某个时候不可避免地需要将这些更改返回到源文件中。在这之后,在其他语言文件中又出现了想要避免的模糊条目。