2010-05-26 62 views
10

使用基於Python的Babel gettext實用程序,是否有任何技術可以在.pot文件的所有更新中保留文件中的翻譯器註釋和舊(「廢棄」)翻譯(標有#~)?使用Babel:如何保護GNU gettext PO文件中的翻譯者評論(以及舊翻譯)?

第一次在.po文件中過時的翻譯和pybabel update運行時,翻譯標記爲#~。一方面,它被視爲評論,並且不會在翻譯者查看並更改它時使用,但另一方面,它不會被刪除,因此翻譯者可以參考它或複製文本從它到其他翻譯。

但是,下次運行pybabel update時,所有註釋都將從文件中永久刪除。這意味着那些標有#~的翻譯也會被刪除。

例如,巴貝爾版本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 "" 

如何更新我的翻譯文件而不會丟失我的意見和舊翻譯?

+0

你能指定你正在使用的庫,並提供一個示例文件嗎? – 2014-07-22 15:23:59

+0

@JamieCockburn這有幫助嗎? – 2014-07-22 22:47:09

回答

6

而不是使用pybabel更新使用msgmergegettext utilities

在你的情況,這將是:

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"