使用python解析gettext` .po`文件

ale*_*lex 9 python gettext

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

有一个更好的方法吗?

Mes*_*ion 23

在大多数情况下,您不需要.po自己解析文件.开发人员为翻译人员提供.pot模板文件,他们将其重命名为xx_XX.po并翻译字符串.那么你作为开发人员只需要.mo使用GNU的gettext工具(或其Python实现pygettext)将它们"编译"到文件中

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

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

代码库: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
Run Code Online (Sandbox Code Playgroud)

它不容易;)

  • 好消息:经过三年的漫长中断后,该项目似乎再次活跃起来!作者正在合并一些拉取请求并对错误报告进行分类。到目前为止,2020 年只有几个提交,但至少没有_被放弃_。 (3认同)
  • @saeedgnu:也许您可以帮助改进它?“ polib”是用于处理po文件的最广泛使用的库,并且正在积极维护中,因此任何改进都将使*大量*的软件受益 (2认同)
  • 看起来 `polib` 没有维护:最后一次发布是在 2017 年,并且 bitbucket Mercurial 存储库已关闭。 (2认同)
  • @Boris:这非常不幸,它一直是一个了不起的项目。关于存储库,它已关闭,因为 BitBucket 不再支持 Mercurial 存储库,但至少所有者似乎在 github 上设置了 git 存储库:https://github.com/izimobil/polib (2认同)

yak*_*yak 3

Babel 包含一个用 Python 编写的 .po 文件解析器:

http://babel.edgewall.org/

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