【问题标题】:Internationalizing a Python 2.6 application via Babel通过 Babel 国际化 Python 2.6 应用程序
【发布时间】:2011-02-23 14:21:31
【问题描述】:

我们正在评估 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 cfg 文件执行此操作,但我一直无法找到有关 Babel cfg 文件格式的文档。

"项目 ID 版本:项目版本\n" "Language-Team: en_US \n"

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

谢谢, 马尔科姆

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

【问题讨论】:

  • 为什么您不想只使用移植到 win32 的 GNU gettext 实用程序来提取消息? gnuwin32.sf.net
  • 嗨 Bializ:安装 GNU gettext 实用程序对于我们维护自己的 PO 文件的客户来说并不方便。 Babel 实用程序的另一个优点是它们默认以 UTF-8 模式工作。我们在让 GNU gettext 实用程序始终如一地执行此操作时遇到了一些问题(它们默认为 ASCIII)。

标签: python internationalization translation gettext python-babel


【解决方案1】:

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

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

【讨论】:

  • 嗨丹尼斯:谢谢你的帮助。我知道 -k 选项,但找不到将 N_ 或 n_ 映射到 ngettext 函数的方法,以便将这些函数的参数作为复数处理(创建 msgid_plural、msgid[0] 等)与别名的gettext。我很欣赏将 N_ 用作 NULL 翻译的参考。与支持 N_ 或 n_ 作为 ngettext 别名的其他语言 gettext 实现相反,这似乎是 Python 特定的语法 (?)。
  • 嗨 Denis:您的“-k n_:1,2”技术非常有效 - 非常感谢!对于档案:我们决定使用 N_ 与 n_ 来遵循看起来像 ngettext 缩写的事实上的行业标准。
【解决方案2】:

回答问题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元数据。

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多