我遵循了Python i18n和l10n的流程,以在Python应用程序中外部化和翻译文本消息。但是,当我将Python代码打包到wheel软件包中时,在setuptools文档中找不到任何指导。
因为本地化的消息文件可以被视为数据文件。也许,我可以使用package_data参数来包含那些文件。但是,这似乎不是正确的方法。因为部署的本地化消息文件应该位于系统默认语言环境位置/ usr / share / locale或用户特定的位置。无论哪种方式,我都很难将pkg_resources软件包连接到gettext软件包,而又不会弄乱实际的物理路径黑客行为。
答案 0 :(得分:0)
这就是我所做的。我验证了wheel软件包已在Linux,Mac OSX和Windows 10中正确部署并加载了本地化* .mo消息目录文件。
将您的语言环境文件夹移动到顶级Python软件包文件夹下。例如,假设您的软件包名称为pkg1
,而您拥有用于法语语言环境的my_msg.mo
目录文件。将您的* .mo文件移动到pkg1/locales/fr/LC_MESSAGES/my_msg.mo
在setup.py中,添加:
...
package_data={'pkg1': ['pkg1/locales//LC_MESSAGES/.mo']},
include_package_data=True,
...
在您的Python脚本中,使用以下方法无需硬代码即可加载任何物理路径:
...
locale_path = pkg_resources.resource_filename('pkg1', 'locales')
my_msg = gettext.translation(domain='my_msg', localedir=locale_path, fallback=True)
_T = my_msg.gettext
print(_T("hello world!"))
...