通过Babel国际化Python 2.6应用程序

时间:2010-05-25 08:55:48

标签: python internationalization translation gettext babel

我们正在评估Windows下的Babel 0.9.5 [1]与Python 2.6一起使用,并提出以下问题,我们通过阅读文档或谷歌搜索无法回答这些问题。

1)我想对ungettext使用_ like缩写。关于是否应该使用n_或N_,是否有一个概念?

n_似乎不起作用。 Babel不提取文本。

N_似乎部分有效。 Babel像gettext一样提取文本,但不为ngettext格式化(缺少复数参数和msgstr [n]。)

2)有没有办法在创建POT文件时设置如下的初始msgstr字段?

我怀疑可能有办法通过Babel cfg文件执行此操作,但我一直无法找到有关Babel cfg文件格式的文档。

“Project-Id-Version:PROJECT VERSION \ n” “语言团队:en_US \ n”

3)有没有办法在我们的PO文件中保留“过时的”msgid / msgstr?当我使用Babel update命令时,新创建的过时字符串标有#〜前缀,但现有的过时消息字符串会被删除。

谢谢, 马尔科姆

[1] http://babel.edgewall.org/

2 个答案:

答案 0 :(得分:8)

默认情况下,pybabel extract会识别以下关键字:_gettextngettextugettextungettextdgettextdngettextN_。使用-k option添加其他人。 N_通常用于NULL-translations(也称为延迟翻译)。

更新-k选项可以列出要放入目录的函数的参数。因此,如果您使用n_ = ngettext尝试pybabel extract -k n_:1,2 ...

答案 1 :(得分:1)

回答问题2):

如果您通过pybabel extract运行Babel,则可以通过Project-Id-Version--project选项设置--version

如果您通过setup.py extract_messages运行Babel,则会从分发中获取Project-Id-Version(项目名称和setup.py文件中的版本)。

这两种方式还支持用于设置POT元数据的选项--msgid-bugs-address--copyright-holder