开发者

Using Babel: How to protect translator comments (and old translations) in GNU gettext PO files?

With the Python-based Babel gettext utilities, are there any techniques to preserve transla开发者_开发技巧tor comments and old ("obsolete") translations (marked with #~) in .po files across updates from the .pot file?

The first time an obsolete translation is in a .po file, and pybabel update is run, the translation is marked with #~. This is so that on the one hand, it is treated as a comment and not used until a translator looks it over and changes it, yet on the other hand, it is not removed, so a translator can refer to it, or copy text from it into their other translations.

However, the next time pybabel update is run, all comments are permanently removed from the file. This means those translations marked with #~ are removed, too.

For example, with Babel version 0.9.6 and Jinja2 version 2.6, and the following files:

./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"

After the following commands are run:

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

The Portuguese messages.po file loses all its old comments, and contains only:

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

# ... similar header stuff ...

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

How can I update my translation files without losing my comments and old translations?


Instead of using pybabel update use msgmerge from gettext utilities

In your case it would be:

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

Example:

having reference.pot file:

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

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

and pt_previous.po file with your previous translations:

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"

Running a command:

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

Will make ./pt_new.po file which looks like this:

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"
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜