Mal*_*olm 10 python gettext 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
Run Code Online (Sandbox Code Playgroud)
./templates/test.html:
<html><body>
<h1>{% trans %}My website{% endtrans %}</h1>
</body></html>
Run Code Online (Sandbox Code Playgroud)
./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"
Run Code Online (Sandbox Code Playgroud)
运行以下命令后:
$ pybabel extract -F babel.ini -o i18n/messages.pot .
$ pybabel update -l pt_PT -d i18n -i i18n/messages.pot
Run Code Online (Sandbox Code Playgroud)
葡萄牙messages.po文件丢失了所有旧评论,仅包含:
./i18n/pt_PT/LC_MESSAGES/messages.po:
# ... similar header stuff ...
#: templates/test.html:2
msgid "My web site"
msgstr ""
Run Code Online (Sandbox Code Playgroud)
如何更新我的翻译文件而不会丢失我的评论和旧翻译?
而不是使用pybabel更新使用来自gettext实用程序的msgmerge
在你的情况下,它将是:
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 ""
Run Code Online (Sandbox Code Playgroud)
和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"
Run Code Online (Sandbox Code Playgroud)
运行命令:
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"
Run Code Online (Sandbox Code Playgroud)