如何在Python包中正确进行本地化?
我正在写自己的Python应用程序,想知道在源代码分发中正确地包含本地化(即多语言支持)的方法是什么。我在查阅setuptools的文档时遇到了困难;那里甚至没有提到本地化的内容。我使用pypabel来提取我的消息目录并进行编译。
问题
- 在使用setup.py创建源代码包之前,有没有办法自动将
*.po
文件编译成*.mo
文件?目前我必须在每种语言上手动编译所有内容…… 我应该把这些
*.mo
文件放在哪里?不同的Linux发行版对这些文件有不同的存放位置。在我看来,我在setup.py
中这样写data_files=[('share/locale/de/LC_MESSAGES', ['locale/de/LC_MESSAGES/project.mo'])
其实并不太合理。在某台特定的Linux机器上用pip安装时可能会有效,但在BSD或Windows上可能就会出问题……
1 个回答
1
首先,有一些工具可以帮助你在Python中处理po文件,建议你看看Babel,然后你可以获得setup.py的额外命令。
理论上,你也可以把compile_catalogs
作为源代码构建的必要步骤,但我个人觉得没必要,因为如果你不先编译,就无法测试用python setup.py develop
链接的包中的消息。而且,如果你使用Babel,可能你的源代码构建根本不需要.mo
文件。
其次:我们的应用程序使用的是pyramid这个网页框架,那里有个约定是使用package_data:
setup(
# ...
package_data={'yourpackage': ['i18n/*/LC_MESSAGES/*.mo' ]},
# ...
如果你的本地化文件在yourpackage/i18n/
目录下,你可以用pkg_resources
来找到路径,比如:
pkg_resources.resource_filename('yourpackage', 'i18n')
这将指向翻译文件的位置。