我有几个用 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)的情况下编辑起来更加复杂,而且似乎没有其他第三方解决方案或 Web 服务。因此,翻译人员需要学习新工具(如果他们已经熟悉 PO 工具)。
但以上所有项目都不足以明确说明任何工具优于其他工具。而且我不想就什么是更好的问题展开激烈的战争,因为它非常主观。我只想知道我缺少 QObject.tr() 与 gettext 的优缺点。