【问题标题】:What is the correct way to include localisation in python packages?在 python 包中包含本地化的正确方法是什么?
【发布时间】:2014-05-22 09:37:37
【问题描述】:
我正在编写自己的 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 上中断...
【问题讨论】:
标签:
python
linux
gettext
packaging
setuptools
【解决方案1】:
对于第一个:Python中有处理po文件的工具,建议你查看Babel,然后你会得到extra commands for setup.py。
应该也可以将compile_catalogs 挂钩作为源代码构建的必要条件,但我还没有发现需要它,因为如果你不测试与python setup.py develop 链接的包中的消息' t 先编译。此外,如果您需要 Babel,也许您的源代码构建根本不需要 .mo。
对于第二个:我们的应用程序使用金字塔网络框架,约定使用 package_data:
setup(
# ...
package_data={'yourpackage': ['i18n/*/LC_MESSAGES/*.mo' ]},
# ...
如果您的本地化位于yourpackage/i18n/,您可以使用pkg_resources 查找路径,例如:
pkg_resources.resource_filename('yourpackage', 'i18n')
将指向翻译的位置。