用python解析gettext`.po`文件

用python解析gettext`.po`文件,python,gettext,Python,Gettext,我需要从.po文件中提取消息。有没有Python模块可以做到这一点?我编写了一个解析器,但它取决于平台(\r\n与\n) 有更好的方法吗?使用内置的gettext模块: 在我看来,这是谷歌在提供python-gettext之后的第一个搜索结果。如果您想知道这是否是您搜索的内容,那么是的。Babel包括一个用Python编写的.po文件解析器: 内置的gettext模块仅适用于二进制.mo文件。在大多数情况下,您不需要自己解析.po文件。开发人员给翻译人员一个.pot模板文件,他们将其重命名为x

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


有更好的方法吗?

使用内置的gettext模块:


在我看来,这是谷歌在提供
python-gettext
之后的第一个搜索结果。如果您想知道这是否是您搜索的内容,那么是的。Babel包括一个用Python编写的.po文件解析器:


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

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

但是,如果您想/需要自己解析po文件,而不是编译它们,我强烈建议您使用
polib
,一个著名的python库来处理
po
文件。它被几个大型项目使用,如Mercurial和Ubuntu的Launchpad翻译引擎:

PyPi软件包主页:

代码存储库:

(原始存储库托管在Bitbucket上,不再支持Mercurial:)

文件:

导入模块是一个文件,具有MIT许可证,因此您可以轻松地将其合并到代码中,如下所示:

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

再简单不过了;)

gettext
非常棒,但它只适用于编译的
mo
文件,而不适用于纯文本
po
ones像
polib
这样的书是未维护的:上一个版本是2017年,bitbucket mercurial回购协议已经关闭。@Boris:这是非常不幸的,它一直是一个了不起的项目。关于回购协议,它已经停止了,因为BitBucket不再支持Mercurial存储库,但至少所有者似乎已经在github设置了git存储库:好消息:经过3年的长时间中断,该项目似乎又恢复了活力!作者正在合并一些pull请求并筛选bug报告。到目前为止,只有一对夫妇承诺在2020年,但至少它没有被放弃。