internationalization - 使用 gettext 代替 QObject.tr() 进行 PyQt4 应用程序本地化的优缺点?

标签 internationalization pyqt4 gettext localization

我有几个用 PyQt4 编写的应用程序,其中我使用了标准的 Python gettext 库来进行 GUI 的国际化和本地化。它对我很有用。但我选择 gettext 只是因为我已经拥有 gettext 使用的知识和经验,并且对 Qt4 tr() 方法的经验为零。

现在我想更好地比较这两种方法,并通过使用 gettext 而不是 QObject.tr 来了解我所缺少的东西,是否有任何严重的理由为什么我不应该将 gettext 用于 Qt4/PyQt4 应用程序?

在我的理解中,使用 gettext 的优点是:

  • GNU gettext 是成熟的,它似乎是 GNU/Linux 世界中事实上的标准。
  • PO 文件有足够多的特殊编辑器来简化翻译人员的工作,尽管 PO 模板的文本性质使其并非绝对必要。
  • 甚至还有可用于协作翻译的网络服务。
  • gettext 是标准的 Python 库,所以我不需要安装任何特殊的东西来在运行时使用它。
  • 它对通过 ngettext() 选择单/复数形式有很好的支持。

  • 我认为 QObject.tr() 的优点:
  • 这是 Qt4/PyQt4 的原生技术,所以也许它会更好/更快地工作(尽管我没有数据证明)。
  • 要翻译的消息可能有额外的上下文信息,这将帮助翻译人员选择同音词的最佳变体,例如根据实际上下文,英文单词“Letter”可以翻译为“Character”、“Mail”甚至是“Paper size”。

  • 我认为 QObject.tr() 与 gettext 的缺点:
  • 我没有在 Qt 文档中找到如何支持单数/复数选择。
  • Qt4 TS 翻译模板是 XML 格式,因此在没有特殊编辑器(QT Linguist)的情况下编辑起来更复杂,并且似乎没有其他第三方解决方案或网络服务。因此,翻译人员需要学习新工具(如果他们已经熟悉 PO 工具)。

  • 但以上所有项目都不足以明确说明任何工具优于其他工具。我不想就更好的东西展开激烈的 war ,因为这是非常主观的。我只想知道 QObject.tr() 与 gettext 的优缺点是什么。

    最佳答案

    使用 QObject.tr() 的一个简单原因是:

    它使您无需在 Windows 上安装 gettext,从而使跨平台工作更容易一些。
    我尝试在 Windows 上使用尽可能少的二进制依赖项。

    关于internationalization - 使用 gettext 代替 QObject.tr() 进行 PyQt4 应用程序本地化的优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021567/

    相关文章:

    Laravel gettext 还是本地化?

    python - 国际化单位系统

    php - 如何国际化 PHP 第三方库

    python - Django View 使用 PyQt 将 URL 转换为 PDF

    python - PyQT:在第一个窗口之前退出/完成第二个窗口

    python - cx_freeze 的 exe 错误

    java - 如何在 xgettext 的 bean 验证注释中标记字符串消息?

    python - 如何在 python 中为多种语言编写文档字符串

    PHP iconv greek/cyrillic 音译不起作用

    ruby - 如何国际化 ruby gem ?