在python包中包含本地化的正确方法是什么?

时间:2014-04-09 09:28:22

标签: python linux gettext packaging setuptools

我正在编写自己的python应用程序,我想知道在源代码分发中包含本地化的正确方法是什么。我挣扎着setuptools的文件;在那里甚至没有提到本地化。我使用pypabel来提取我的消息目录并进行编译。

问题

  • 在使用setup.py创建源包之前,是否有可能自动将*.po编译为*.mo?目前我必须手动为每种语言编译所有内容...
  • 我应该在哪里添加*.mo个文件?几个Linux发行版对这些文件有不同的位置。在我看来,我在setup.py

    中这样排列
    data_files=[('share/locale/de/LC_MESSAGES', ['locale/de/LC_MESSAGES/project.mo'])
    

    没有意义。当使用pip安装时,它可能在特定的Linux机器上工作。但它可能会破坏bsd或windows ......

1 个答案:

答案 0 :(得分:1)

首先:有一些工具可以在Python中处理po文件,建议你查看Babel,然后得到extra commands for setup.py

应该可以将compile_catalogs挂钩作为源代码构建的必备条件,但我还没有找到它的需要,因为您无法测试来自与{链接的包的消息{1}}如果你不先编译。此外,如果您需要Babel,也许您的源代码构建根本不需要python setup.py develop

第二种:我们的应用程序使用金字塔Web框架,惯例是使用package_data:

.mo

然后,如果您的本地化位于setup( # ... package_data={'yourpackage': ['i18n/*/LC_MESSAGES/*.mo' ]}, # ... ,则可以使用yourpackage/i18n/来查找路径,例如:

pkg_resources

将指向翻译的位置。