【问题标题】:Parsing gettext `.po` files with python用python解析gettext`.po`文件
【发布时间】:2012-03-06 08:49:34
【问题描述】:

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

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: python gettext


    【解决方案1】:

    在大多数情况下,您不需要自己解析.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 已关闭。
    • @Boris:很不幸,这一直是一个了不起的项目。关于repo,因为BitBucket不再支持Mercurial repositories,所以down了,但至少楼主好像在github上设置了一个git repository:github.com/izimobil/polib
    • 好消息:在长达 3 年的中断之后,该项目似乎再次活跃起来!作者正在合并一些拉取请求并分类错误报告。到目前为止,2020 年只有几个提交,但至少它没有放弃
    【解决方案2】:

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

    http://babel.edgewall.org/

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

    【讨论】:

      【解决方案3】:

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

      在我提供python gettext 之后,它出现在 Google 的第一个搜索结果中。如果您想知道这是否是您搜索的内容,那么是的。

      【讨论】:

      • gettext 很棒,但它只适用于编译后的 mo 文件,而不适用于纯文本 po 文件
      猜你喜欢
      • 2011-06-05
      • 2012-01-16
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多