我有几个应用程序用PyQt4编写,我已经使用标准Python gettext库进行GUI的国际化和本地化。它适合我。但是我选择gettext仅仅是因为我已经有了gettext使用的知识和经验,并且没有使用Qt4 tr()方法的经验。使用gettext代替QObject.tr()进行PyQt4应用本地化的优缺点?
现在我想更好地比较这两种方法,并通过使用gettext而不是QObject.tr来了解我所缺少的东西,以及为什么我不应该使用gettext来处理Qt4/PyQt4应用程序吗?
在使用的gettext的我的理解优点是:
- GNU gettext的是成熟的,它似乎是标准的事实上的在GNU/Linux世界。
- PO文件有足够的特殊编辑来简化翻译工作,但PO模板的文本性质使其不是绝对必要的。
- 甚至还有可用于协作翻译的网络服务。
- gettext是标准的Python库,所以我不需要安装任何特殊的东西来在运行时使用它。
- 它通过ngettext()对单数/复数形式选择有很好的支持。
我看到了什么是QObject.tr()的优点:
- 这是本土技术的Qt4/PyQt4的,所以也许它会工作得更好/更快(虽然我没有数据证明)。
- 要翻译的消息可以具有附加的上下文信息,这将有助于翻译者为同音词词汇选择最佳变体,例如,根据实际情况,英文单词“Letter”可以翻译为“字符”,“邮件”或甚至“纸张大小”类型。
我看到了什么是QObject.tr的缺点()VS的gettext:
- 我没有Qt文档如何支持的功能单数/复数选择那里找到。
- Qt4 TS翻译模板采用XML格式,因此在没有特殊编辑器(QT Linguist)的情况下编辑起来更加复杂,似乎没有其他第三方解决方案或Web服务。所以翻译人员需要学习新的工具(如果他们已经熟悉PO工具)。
但是,上述所有项目都不够清楚地说任何工具都比其他工具更好。我不想开始火焰战争,因为这很主观。我只想知道我缺少的QObject.tr()与gettext的利弊。
我想补充Qt不处理复数形式的'TR(“您选择了%N项目(S)”,item.count ())'看起来好像它可能工作,但它在Qt的系统中记录很差,如果说你真的想要两个(或更多)不同的字符串,而不仅仅是一个后缀,真的没有解释如何放置:'tr(“ %n item {is | s are}现在处于选择状态。“,,item.count())' – SlySven 2016-01-19 07:38:36