你试过巴别塔吗?它支持用于从各种来源提取消息的插件系统。
lingua为 ZPT 和 zope.i18nmessageid 提供插件,为您提供 i18ndude 的所有功能,但具有相当活跃的开源社区。
要在项目中使用 babel,您需要将setup.py 配置为使用 babel commands,然后将这些功能作为 setup.py 命令运行;例如python yourpackage/setup.py extract_messages
。
如果lingua
egg 可以作为依赖项使用,那么你可以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-file
CLI 选项而不是message_extractors
条目,则该选项需要带有[method fileglob]
标题的 INI 样式文件格式:
[lingua_python **.py]
[lingua_xml **/templates/**.pt]
每个部分都可以包含要传递给提取器函数的选项(每一option = value
行都成为传递给它的选项字典中的一个键值对),但我认为 lingua_* 方法没有任何选项。
然后将提取器配置用于您在命令行中提到的每个输入目录,或 setup.pypackages
选项中提到的每个包。