跳转到主要内容

发布包时编译po文件

项目描述

介绍

本包编译po文件。它包含一个zest.releaser入口和一个独立的命令行工具。

目标

您想要发布一个包含locales目录(或locale,或其他名称,只要其中包含一个位于某处的LC_MESSAGES文件夹即可)的包,该目录中包含.po文件中的翻译。您还希望将编译后的.mo文件包含在发布中,但您不希望在版本控制系统中(如git)保留这些文件,因为它们是二进制文件,可以很容易地重新创建。这是很好的。这个包可以帮助您完成这项工作。

需要.mo文件?添加一个MANIFEST.in文件。

当您使用python setup.py sdist创建源分发时,Python不会自动包含所有文件。它可能会查看版本控制系统的信息(RCS),但这可能不起作用。这取决于您的RCS、Python版本、setuptools或额外的包,如setuptools-git

由于编译后的.mo文件最好不在git(或任何其他RCS)中存储,因此您需要提供有关要包含哪些文件的提示。您可以通过添加一个MANIFEST.in文件来实现这一点。假设您的包大致包含以下内容(不是所有文件都显示)

your.package/setup.py
your.package/your/package/locales/nl/LC_MESSAGES/domain.po

那么您需要一个像这样的MANIFEST.in文件

recursive-include your *

或者用更大的例子

recursive-include your *
recursive-include docs *
include *
global-exclude *.pyc

我将逐行解释以澄清。是的:我现在如果想要有一个正确的MANIFEST.in文件的例子,就简单地去这个PyPI页面。所以现在这个文档比严格需要的稍微大一点。:-)

recursive-include your *

这告诉distutils递归地包含your目录下的所有(*)文件和目录。试试看:创建一个如上例所示的结构,并带有合适的setup.py,将domain.po文件复制为domain.mo作为愚蠢的测试,运行python setup.py sdist并检查.mo文件是否最终出现在创建的分发中。

recursive-include docs *

包含docs目录中的文件。如果此目录不存在,您将收到警告,因此您可能想要删除它,但将其保留在那里并无害。

include *

包含根目录中未识别的文件。否则默认情况下,仅包括标准文件,如README.txtsetup.pysetup.cfg。因此,例如必须显式包含CHANGES.txt文件(此处使用*)。

global-exclude *.pyc

这可以避免在发布中不必要地添加编译后的python文件。当这些文件不存在时,例如在新鲜检出后,您将收到无害的警告:no previously-included files matching '*.pyc' found anywhere in distribution

有关创建源分发和如何使用MANIFEST.in的更多信息,请参阅Python distutils文档setuptools文档

当这部分工作正常时,zest.pocompile这个包唯一需要做的是实际上找到所有的.po文件并将它们编译成.mo文件。它简单地在名为LC_MESSAGES的目录中查找并编译所有找到的.po文件。

命令行工具

当你运行pip install zest.pocompile时,你会得到一个命令行工具pocompile。当你运行它时,它会遍历当前目录,在结构良好的本地目录中找到所有的po翻译文件,并将它们编译成.mo文件。你也可以给它一个目录列表作为参数。通过运行带有--help选项的命令来获取一些帮助。

在上面的例子中,如果你在your.package目录下运行pocompile,它将创建这个文件

your.package/your/package/locales/nl/LC_MESSAGES/domain.mo

zest.releaser入口点

你不需要zest.releaser来使zest.pocompile正常工作。但如果你同时使用这两个工具,并结合一个适当的MANIFEST.in文件,发布带有编译好的.mo文件的资源分发就变得容易了。

zest.releaser的release(或fullrelease)命令会创建一个(git或其他)标签并将代码签出到这个标签。然后它创建一个源分发(sdist)和可能的wheel(bdist_wheel),并将其上传到PyPI。当zest.pocompile加入到这个过程中时,它会在签出标签后立即编译.po文件。这对创建包含.mo文件的分发正好合适。

你可能希望在zest.pocompile不可用的情况下,在发布过程中尽早失败。从版本1.6.0开始,你可以通过编辑你想要此功能的包的setup.cfg文件来实现,并添加以下部分

[zest.releaser]
prereleaser.before =
    zest.pocompile.available

致谢

这个包是由Maurits van Rees组装的。

它依赖于python-gettext包。这本身建议使用Babel包。但它正好做了我们需要的,而且其发布版存储在PyPI上,所以我们忽略了那个建议。

主要功能是从collective.releaserbuild_mo命令中取出的。

谢谢!

待办事项

  • 添加测试。

变更日志

2.0.0 (2023-09-11)

  • 发布最终版本。自上次alpha版以来没有变化。[maurits]

2.0.0a1 (2023-07-13)

  • 需要Python 3.8+并切换到原生命名空间包。这是必要的,因为zest.releaser 9.0.0a1也做了同样的事情。[maurits]

1.6.0 (2022-09-13)

  • 添加zest.pocompile.available。你可以在zest.pocompile不可用的情况下让包的完整发布提前失败。编辑其setup.cfg,并添加一个带有值prereleaser.before = zest.pocompile.available[zest.releaser]部分。[maurits]

1.5.0 (2020-01-29)

  • 声明Python 2和3的兼容性。看起来工作得很好。[maurits]

1.4 (2013-07-05)

1.3 (2011-12-16)

  • 修复了示例MANIFEST.in。[maurits]

1.2 (2011-12-16)

  • 在readme中添加了一个更大的MANIFEST.in文件示例。还在zest.pocompile本身中添加了一个MANIFEST.in,以便将CHANGES.txt包含在源分发中。[maurits]

1.1 (2011-12-15)

  • 在任意 LC_MESSAGES 目录中查找 .po 文件。如果它位于 localeslocale 目录内的某个语言目录中,也不再重要,因为它们也可能有 plonelocaleslocales_for_version_2_only 等名称。请注意,在 Plone 中,.po 文件也可以位于 i18n 目录中,但那些不应被编译;它没有 LC_MESSAGES 目录,所以我们自动跳过它。[maurits]

1.0 (2010-10-19)

  • 首次发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

zest.pocompile-2.0.0.tar.gz (7.0 kB 查看哈希值)

上传时间 源代码

构建分发

zest.pocompile-2.0.0-py3-none-any.whl (6.4 kB 查看哈希值)

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面