使用Python解析gettext的`.po`文件

24

我需要从.po文件中提取消息。有没有Python模块可以做到这一点?我写了一个解析器,但它依赖于平台(\r\n vs. \n)。

还有更好的方法吗?

3个回答

40
大多数情况下,您不需要自己解析 .po 文件。开发人员为翻译者提供一个 .pot 模板文件,他们将其重命名为 xx_XX.po 并翻译字符串。然后作为开发人员,您只需使用 GNU 的 gettext 工具(或其 Python 实现的 pygettext)“编译”它们为 .mo 文件。

但是,如果您想要/需要自己解析 po 文件而不是编译它们,我强烈建议您使用 polib,这是一个知名的用于处理 po 文件的 Python 库。它被许多大规模项目使用,如 Mercurial 和 Ubuntu 的 Launchpad 翻译引擎:

PyPi 包主页: http://pypi.python.org/pypi/polib/

代码存储库: https://github.com/izimobil/polib

(原始存储库托管在不再支持 Mercurial 的 Bitbucket 上:https://bitbucket.org/izi/polib/wiki/Home

文档: http://polib.readthedocs.org

该导入模块是单个文件,采用 MIT 许可证,因此您可以轻松将其合并到您的代码中,如下所示:

import polib
po = polib.pofile('path/to/catalog.po')
for entry in po:
    print entry.msgid, entry.msgstr

再简单不过了 ;)


2
看起来 polib 没有维护了:最后一次发布是在 2017 年,而 bitbucket 上的 mercurial 存储库已经失效。 - user3064538
2
@Boris:这非常不幸,这一直是一个令人惊叹的项目。关于存储库,它已经关闭,因为BitBucket不再支持Mercurial存储库,但至少所有者似乎已经在github上设置了一个git存储库:https://github.com/izimobil/polib - MestreLion
3
好消息:经过长达3年的停滞,该项目似乎又活跃起来了!作者正在合并一些拉取请求和处理错误报告。到目前为止,2020年只有几个提交,但至少它没有被_放弃_。 - MestreLion

3
巴别塔(Babel)包含一个用Python编写的.po文件解析器:

http://babel.edgewall.org/

内置的gettext模块仅适用于二进制.mo文件。

-4

使用内置的gettext模块:http://docs.python.org/library/gettext.html

在我提供python gettext后,它作为谷歌搜索结果的第一项出现。如果你想知道这是否是你要搜索的内容,那么是的,就是它。


3
“gettext” 很棒,但它只能处理编译后的 mo 文件,不能处理纯文本的 po 文件。 - MestreLion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接