【问题标题】:How to include localized message in Python setuptools?如何在 Python setuptools 中包含本地化消息?
【发布时间】:2019-03-26 20:00:38
【问题描述】:

我按照 Python i18n 和 l10n 流程在 Python 应用程序中外部化和翻译文本消息。但是当我将 Python 代码打包成一个 wheel 包时,我在 setuptools 文档中找不到任何指导。

因为本地化的消息文件可以被视为数据文件。也许,我可以使用 package_data 参数来包含这些文件。但是,这样做似乎不是正确的方法。因为已部署的本地化消息文件应位于系统默认语言环境位置 /usr/share/locale 或用户特定位置。无论哪种方式,我都发现很难将 pkg_resources 包连接到 gettext 包而不弄乱真正的物理路径黑客攻击。

【问题讨论】:

标签: python localization internationalization setuptools


【解决方案1】:

这就是我所做的。我验证了 Wheel 包在 Linux、Mac OSX 和 Windows 10 中正确部署和加载了本地化的 *.mo 消息目录文件。

  1. 将您的语言环境文件夹移动到您的顶级 Python 包文件夹下。例如,假设您的包名称 pkg1 并且您有法语语言环境的 my_msg.mo 目录文件。将您的 *.mo 文件移动到 pkg1/locales/fr/LC_MESSAGES/my_msg.mo

  2. 在 setup.py 中,添加: ... package_data={'pkg1': ['pkg1/locales//LC_MESSAGES/.mo']}, include_package_data=True, ...

  3. 在您的 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!")) ...

【讨论】:

  • 在第 2 点下最好使用package_data={'pkg1': ['locales/*/LC_MESSAGES/*.mo']}, ...否则在我的情况下找不到 .mo 文件。此外,Manifest.in 的附加使用也不错。
  • 你是我的英雄!你不知道我找了多久..
  • 我花了整整 8 天的时间才弄清楚这一点。干杯,伙计。
猜你喜欢
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2014-07-20
  • 2016-11-01
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多