通过Babel对Python 2.6应用进行国际化

9 投票
2 回答
1651 浏览
提问于 2025-04-15 23:07

我们正在Windows上评估Babel 0.9.5 [1],准备和Python 2.6一起使用,但有一些问题通过阅读文档或在网上搜索都没能找到答案。

1) 我想用一个带下划线的缩写来代替ungettext。大家有没有统一的看法,应该用n_还是N_呢?

n_似乎不太管用,Babel没有提取文本。

N_看起来部分有效。Babel提取文本的方式和gettext一样,但没有为ngettext格式化(缺少复数参数和msgstr[ n ])。

2) 在创建POT文件时,有没有办法像下面这样设置初始的msgstr字段?

我怀疑可能可以通过Babel的配置文件来实现,但我找不到关于Babel配置文件格式的文档。

"Project-Id-Version: PROJECT VERSION\n" "Language-Team: en_US \n"

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

谢谢,

Malcolm

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

2 个回答

1

关于问题2的回答:

如果你通过 pybabel extract 来运行Babel,你可以使用 --project--version 这两个选项来设置 Project-Id-Version

如果你是通过 setup.py extract_messages 来运行Babel,那么 Project-Id-Version 会从你的项目分发包中获取,也就是在setup.py文件里的项目名称和版本。

这两种方法都支持 --msgid-bugs-address--copyright-holder 这两个选项,用来设置POT的元数据。

8

默认情况下,pybabel extract 会识别以下关键词:_gettextngettextugettextungettextdgettextdngettextN_。如果你想添加其他关键词,可以使用-k 选项。其中,N_ 通常用于处理 空翻译(也叫延迟翻译)。

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

撰写回答