如何在Python包中正确进行本地化?

4 投票
1 回答
516 浏览
提问于 2025-04-18 02:00

我正在写自己的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')

这将指向翻译文件的位置。

撰写回答