python - 使用 Babel : How to protect translator comments (and old translations) in GNU gettext PO files?

标签 python gettext python-babel

与基于 Python 的 Babel gettext 实用程序,是否有任何技术可以在 .po 文件中跨 更新保留翻译注释和旧(“过时”)翻译(标有 #~) .pot 文件?

第一次过时的翻译在.po 文件中,并且运行pybabel update,翻译标记为#~ .这样一来,一方面,它被视为注释,在译者查看并更改之前不会使用,但另一方面,它不会被删除,因此译者可以引用或复制文本从它到他们的其他翻译。

但是,下次运行 pybabel update 时,所有注释将从文件中永久删除。这意味着那些标有 #~ 的翻译也将被删除。

例如,使用 Babel 版本 0.9.6 和 Jinja2 2.6 版和以下文件:

./babel.ini:

[jinja2: **/templates/**.html]
encoding = utf-8

./templates/test.html:

<html><body>
<h1>{% trans %}My website{% endtrans %}</h1>
</body></html>

./i18n/pt_PT/LC_MESSAGES/messages.po:

# ... header stuff generated from
#     pybabel init -l pt_PT -d i18n -i i18n/messages.pot ...

# Don't forget, I want to remember something about this!
#~ msgid "My web page"
#~ msgstr "A minha página de web"

运行以下命令后:

$ pybabel extract -F babel.ini -o i18n/messages.pot .
$ pybabel update -l pt_PT -d i18n -i i18n/messages.pot

葡萄牙语 messages.po 文件丢失了所有旧注释,只包含:

./i18n/pt_PT/LC_MESSAGES/messages.po:

# ... similar header stuff ...

#: templates/test.html:2
msgid "My web site"
msgstr ""

如何在不丢失我的评论和旧翻译的情况下更新我的翻译文件?

最佳答案

不使用 pybabel 更新,而是使用来自 gettext utilitiesmsgmerge

在您的情况下,它将是:

msgmerge ./i18n/pt_PT/LC_MESSAGES/messages.po ./i18n/messages.pot -o ./i18n/pt_PT/LC_MESSAGES/messages.po

例子:

reference.pot文件:

msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: templates/test.html:2
msgid "My web site"
msgstr ""

和包含您之前翻译的pt_previous.po文件:

msgid ""
msgstr ""
"Language-Team: \n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt\n"

# Don't forget, I want to remember something about this!
#~ msgid "My web site"
#~ msgstr "A minha página de web"

运行命令:

msgmerge pt_previous.po reference.pot -o pt_new.po

将生成如下所示的 ./pt_new.po 文件:

msgid ""
msgstr ""
"Language-Team: \n"
"Language: pt\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

# Don't forget, I want to remember something about this!
#: templates/test.html:2
msgid "My web site"
msgstr "A minha página de web"

关于python - 使用 Babel : How to protect translator comments (and old translations) in GNU gettext PO files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916483/

相关文章:

python - 控制 jupyterlab 服务器中使用的 CPU 数量

python - PIL 在 gif 中显示所有之前的帧

PHP gettext 不工作,如何调试?

python - 检索字符串以进行单元测试

python - python matplotlib 中的 4D 绘图

python - 更改单选按钮,然后使用 mechanize (python) 读取()

php - .PO 到 .MO - 程序化转换 (PHP)

android - 如何通过 JSOUP 从 android 中具有类 ="title"的 div 获取所有文本?

python - 将可翻译的文本从外部源获取到目录中

python - Flask-Babel 更新现有的 messages.pot 文件