寻找i18ndude或改进版的替代品

时间:2012-05-18 09:12:50

标签: python internationalization plone gettext zope

我正在寻找改进版的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的界面不兼容,我认为最好去替换。

现在有人写过这样的工具并且愿意分享它,还是这个任务还有待完成?

1 个答案:

答案 0 :(得分:4)

你试过Babel吗?它支持一个插件系统,用于从各种来源提取消息。

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

要在项目中使用babel,您需要configure your setup.py to use babel commands,然后将这些函数作为setup.py命令运行;例如python yourpackage/setup.py extract_messages

如果lingua egg可用作依赖项,那么你可以在setup.py中的message_extractors结构中插件告诉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蛋。

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

[lingua_python **.py]

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

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

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