寻找i18ndude的替代品或改进版本

2024-06-12 15:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找i18ndude的改进版本(已经检查了v3.2.2),或者某种后续版本。i18ndude从Python代码(使用pygettext)和Zope页面模板中提取可翻译的字符串,但它有点难以实现:

  • 它隐藏了pygettext的命令行选项,从而使不可能在不破解代码的情况下指定关键字
  • 它很难理解,也很难扩展(例如,人们可能希望以某种方式添加对Javascript文件的解析)
  • 命令行语法很麻烦(例如“i18ndude merge--pot…”。。。--合并。。。--合并2…)
  • 有些文件没有被解析或以错误的方式解析,导致一些字符串找不到(例如,每个名为“*pt”的文件都被认为是HTML,甚至“*”。xml.pt"). 在
  • 开发似乎在2010年结束。在

有东西就好了

  • 有更好的命令行界面,比如Subversion,支持“command”和“help command”
  • 易于扩展
  • 易于配置(例如,使用哪个解析器解析什么类型的文件,或者如何判断文件的类型,例如svn:mime类型属性考虑在内)

由于命令行接口可能与i18ndude的接口不兼容,我认为最好还是换一个。在

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


Tags: 文件字符串代码命令行版本模板ptzope
1条回答
网友
1楼 · 发布于 2024-06-12 15:16:51

你试过Babel吗?它支持从不同来源提取消息的插件系统。在

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

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

如果linguaegg是可用的依赖项,那么您可以将它的插件放在您的message_extractors结构中设置.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-required-dependency,因为设置.py如果巴别塔真的能用的话,它就可以导入了!您可以尝试通过为cmdclass条目创建垫片来解决这个问题,但我自己还没有尝试过。现在,只需在你的virtualenv或全球范围内安装Babel蛋。在

如果要使用 mapping-fileCLI选项而不是message_extractors条目,那么该选项需要一个带有[method fileglob]头的INI样式的文件格式:

^{pr2}$

每个部分都可以包含要传递给extractor函数的选项(每个option = value行在传递给它的options dict中成为一个键值对),但我不认为lingua*方法有任何选项。在

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

相关问题 更多 >