2012-10-03 17 views
2

這個問題是關於最佳實踐。我目前正在將我的頭腦放在Qt國際化系統中。Qt國際化:您在Qt應用程序中使用什麼源文本?

你在你的Qt應用程序中使用什麼源文本?

  1. 你寫在你的應用程序代碼英文文本和使用,一個作爲最終語言?
  2. 或者您是否編寫英文文本,但仍然爲英文版設置了專用翻譯文件,以便您的代碼中的文本永遠不會顯示給客戶?
  3. 還是你在您的代碼(例如「ID_ABOUT_US」)中使用ID,以便在更改英文文本時語言文件永遠不會「丟失」翻譯?

背景:假設我使用英語作爲源語言,併爲我的應用程序另有5個翻譯文件。現在事實證明,英文文本沒有很好的闡述,需要改變。由於lupdate使用的啓發式方法,我會遇到其他5種翻譯在更改後「丟失」此翻譯的問題嗎?或者你通常認爲這是一種好處,因爲翻譯也應該進行審查?

對您的體驗非常感興趣!

問候,

的Fabian

回答

4
  1. 是的英語,即使它不是你的本地人。它是AFAIK世界上唯一可以用7位ASCII完全表達的語言,因此不要求你使用源代碼編碼。它也是人類翻譯人員普遍理解的語言。然而,源代碼中的「書寫」意味着封裝tr(「」)中的所有內容,從而啓用預期翻譯。如果沒有翻譯(沒有installTranslator()呼叫),tr()是無操作,所以文本將被顯示。這同樣適用於翻譯已安裝的翻譯器。所以你的翻譯不需要完成,未翻譯的文本將顯示在你的「源代碼」英文中。

  2. 「英語翻譯」是很好的一個很少使用的功能:不是愚蠢「1消息(S)收到」你可以有正確的文本,供任何的複數和Qt會爲你做它無需任何編碼。只需使用tr() overload with using the last numeric parameter並根據參數n在TS文件中提供所有複數變體。沒有更多無盡的如果 - 別的意大利麪和三元運營商。

    如果您的目標是多種語言(即不只是英語和其他語言),那麼設置「英文翻譯」對於代碼一致性也很有用。英語被視爲另一種語言,您可以像任何其他語言一樣使用它。如果您沒有英文翻譯,則需要卸載翻譯器才能重新翻譯,然後再次安裝任何其他語言。並不是說這對Qt來說是一個大問題,它只是關於代碼的一致性。你可以做一個[語言,翻譯]的地圖,不需要特別對待英語。

  3. 沒有ids。你會發現你自己開發的命名約定只是爲了不重疊你自己的代碼的不同部分的翻譯。無論如何,您需要提供可讀字符串的ID映射給您的人工翻譯人員。關於「丟失翻譯」的恐懼。如果原始文本變化很大,那麼強制重新翻譯是一件好事。如果它沒有改變那麼多,那麼語言學家很可能會保留它,因爲TS文件也保留源文件行。

有疑問時,讀Qt's internationalization guide

+0

優秀。這就回答了我所有的問題,包括你建議的方法的正確理由。 – Fabian

+2

我不喜歡用英語短語作爲別名的想法。我使用ID。這種方法唯一的缺點是,如果我忘記添加翻譯,用戶將看到無法讀取的垃圾。另一方面,如果我忘記了一個翻譯,並且在開發過程中看到這個字符串,我一定會注意到,它突出並吸引了眼球。 –

0

Qt的方法是包括在包裹通過tr(」「)的標誌,而不是一個單獨的字符串表

代碼您的母語的消息有一個工具將提取所有這些併爲您的(人類)翻譯器創建一個文件,然後替換應用程序代碼中的字符串。請參閱http://qt-project.org/doc/qt-4.8/linguist-manual.html

它也有一個printf()類型的格式化位置相關標誌,因此您可以在不同的語言中使用tr(「%1在%2之前」)和tr(「zer%2 ist bevor%1 「)

+0

感謝您的響應。在使用本地語言時,實際上是否修復了以本地語言修復問題會導致「lupdate」將該消息標記爲「新」(如果差異太大)的問題?這意味着該消息在.ts文件中顯示爲未翻譯,從而導致翻譯人員付出了努力。 – Fabian