【发布时间】:2012-03-06 08:49:34
【问题描述】:
我需要从.po 文件中提取消息。是否有 Python 模块可以做到这一点?我写了一个解析器,但它取决于平台(\r\n vs. \n)。
有没有更好的方法来做到这一点?
【问题讨论】:
我需要从.po 文件中提取消息。是否有 Python 模块可以做到这一点?我写了一个解析器,但它取决于平台(\r\n vs. \n)。
有没有更好的方法来做到这一点?
【问题讨论】:
在大多数情况下,您不需要自己解析.po 文件。开发人员给翻译人员一个.pot 模板文件,他们将其重命名为xx_XX.po 并翻译字符串。然后,作为开发人员,您只需使用 GNU 的 gettext 工具(或其 Python 实现,pygettext)将它们“编译”为 .mo 文件
但是,如果您想/需要自己解析 po 文件,而不是编译它们,我强烈建议您使用polib,这是一个著名的python 库来处理po 文件。它被多个大型项目使用,例如 Mercurial 和 Ubuntu 的 Launchpad 翻译引擎:
PyPi 软件包主页: http://pypi.python.org/pypi/polib/
代码库: https://github.com/izimobil/polib
(原始存储库托管在 Bitbucket,不再支持 Mercurial: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
再简单不过了;)
【讨论】:
polib 未维护:2017 年的最后一个版本,bitbucket mercurial repo 已关闭。
【讨论】:
使用内置 gettext 模块:http://docs.python.org/library/gettext.html
在我提供python gettext 之后,它出现在 Google 的第一个搜索结果中。如果您想知道这是否是您搜索的内容,那么是的。
【讨论】:
gettext 很棒,但它只适用于编译后的 mo 文件,而不适用于纯文本 po 文件