4

我正在寻找 i18ndude 的改进版本(已签出 v3.2.2)或某种继任者。i18ndude 从 Python 代码(使用 pygettext)和 Zope 页面模板中提取可翻译的字符串,但它有些不尽如人意:

  • 它隐藏了 pygettext 的命令行选项,因此无法在不修改代码的情况下指定关键字
  • 它难以理解且难以扩展(例如,可能想以某种方式添加对 Javascript 文件的解析)
  • 命令行语法很麻烦(例如“i18ndude merge --pot ... --merge ... --merge2 ...”)
  • 一些文件没有被解析或以错误的方式解析,导致一些字符串未被找到(例如,每个名为“*pt”的文件都被认为是HTML,甚至是“*.xml.pt”)。
  • 开发似乎已于 2010 年结束。

有东西就好了

  • 具有更好的命令行界面,例如Subversion,支持“命令”和“帮助命令”
  • 易于扩展
  • 易于配置(例如使用哪个解析器解析哪种文件,或者如何判断文件的类型,例如考虑 svn:mime-type 属性)

由于命令行界面可能与 i18ndude 不兼容,我认为最好换一个。

现在有没有人写过这样的工具并愿意分享它,或者这是一项仍有待完成的任务?

4

1 回答 1

4

你试过巴别塔吗?它支持用于从各种来源提取消息的插件系统。

lingua为 ZPT 和 zope.i18nmessageid 提供插件,为您提供 i18ndude 的所有功能,但具有相当活跃的开源社区。

要在项目中使用 babel,您需要将setup.py 配置为使用 babel commands,然后将这些功能作为 setup.py 命令运行;例如python yourpackage/setup.py extract_messages

如果linguaegg 可以作为依赖项使用,那么你可以message_extractors在 setup.py 的结构中使用它的插件来告诉 Babel 如何从源文件中提取 i18n 消息:

... 
from babel.messages import frontend as babel
...


setup(...
    setup_requires=['lingua'],
    cmdclass = dict(
        compile_catalog=babel.compile_catalog,
        extract_messages=babel.extract_messages,
        init_catalog=babel.init_catalog,
        update_catalog=babel.update_catalog,
    ),
    message_extractors = {
        'path/in/package': [
            ('**.py',                'lingua_python', None),
            ('**/templates/**.pt',   'lingua_xml', None),
        ],
    },
    ...
)

请注意,您不能将 Babel 作为 setup_requires 依赖项包含在内,因为 setup.py 脚本仅在它可以实际导入 babel 时才有效!您可以尝试通过为 cmdclass 条目创建垫片来解决此问题,但我自己还没有尝试过。现在,只需在你的 virtualenv 或全局安装 Babel egg。

如果您想使用--mapping-fileCLI 选项而不是message_extractors条目,则该选项需要带有[method fileglob]标题的 INI 样式文件格式:

[lingua_python **.py]

[lingua_xml **/templates/**.pt]

每个部分都可以包含要传递给提取器函数的选项(每一option = value行都成为传递给它的选项字典中的一个键值对),但我认为 lingua_* 方法没有任何选项。

然后将提取器配置用于您在命令行中提到的每个输入目录,或 setup.pypackages选项中提到的每个包。

于 2012-05-18T09:46:55.583 回答