我正在寻找改进版的i18ndude(已经检查过v3.2.2),或某种继承者。 i18ndude从Python代码(使用pygettext)和Zope页面模板中提取可翻译的字符串,但它有点不实现:
拥有一些东西会很高兴
由于命令行界面可能与i18ndude的界面不兼容,我认为最好去替换。
现在有人写过这样的工具并且愿意分享它,还是这个任务还有待完成?
答案 0 :(得分:4)
你试过Babel吗?它支持一个插件系统,用于从各种来源提取消息。
lingua为ZPT和zope.i18nmessageid提供插件,为您提供i18ndude的所有功能,但具有相当活跃的开源社区。 p>
要在项目中使用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
选项中提到的每个包。