【问题标题】: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')
    

    将指向翻译的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-29
      • 2021-03-21
      • 2019-07-28
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多