我有幾個應用程序用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