有沒有一種方法可以將QT應用程序翻譯成不同的語言,而無需直接在源代碼中定義文本?我想分離源文本。這將導致所有語言的某種資源文件,包括默認語言(例如英文)。在代碼中翻譯沒有文字的QT應用程序
回答
我們要做的是: *包括轉換爲前默認語言。使用此* .ts文件自動生成其他* .ts文件。這是必需的,因爲我們將翻譯保留在QT環境之外,因爲它們與其他與QT無關的項目相匹配。
然後只需確保此翻譯包含正確的值。
將來我們可以在代碼中定義ID,代表默認翻譯中的文本。就像將TXT_ID_ABOUT翻譯爲「About」一樣。
您可能可以使用QT_TRANSLATE_NOOP
宏系列來執行您想要的操作。那些簡單地將一些文本標記爲「需要翻譯」,以便lupdate
選取它,但可以通過代碼中的變量常量引用這些翻譯後的值。所以......
const char *kHelloWorld = QT_TRANSLATE_NOOP("SomeScope", "Hello world");
後...
return qApp->translate("SomeScope", kHelloWorld);
這仍然是在源代碼中的某處,但它至少是一個步驟中去除。理論上你可以將QT_TRANSLATE_NOOP
的東西放在一個完全不同的Qt項目中,但是在你的真實項目中你需要一些的方法來知道你應該翻譯什麼。 (你仍然需要char *常量某處。)
你想通過沒有源代碼中的英文文本來完成什麼?這可能有助於人們提供更合適的答案。
編輯
基於低於預期的使用
確定您的評論,那麼這恰恰是正常的Qt的翻譯過程中做了什麼。運行lupdate
將創建這些XML文件(它們具有.ts擴展名)。他們可以通過非常易於使用的Qt語言專家的翻譯員打開。他們被翻譯,然後發回給你(程序員),在那裏你運行lrelease
來創建你將隨該應用程序一起提供的二進制翻譯文件。翻譯在運行時上解析爲,所以不需要重新編譯。
如果你想使用戶能夠做到這一點,你會:
- 船舶您有一個空的(翻譯)
.ts
文件和lrelease
程序應用。 - 提供如何使用Qt Linguist翻譯的說明。 (他們可以使用文本編輯器,並直接修改XML,但它更容易與語言學家很多。)
- 解釋如何運行
lrelease
並在砸二進制翻譯文件,使您的應用程序拉他們。
在這最後一步,理論上你可以提供一個很好的類似嚮導的應用程序來隱藏實現細節。
由於lupdate會在每次運行時將其放在那裏,因此您將無法將英文(或源語言,不一定是英文)從XML(.ts)文件中移出。但只要所選語言的翻譯存在,源文本將被忽略。如果沒有翻譯文本,它將默認爲源文本。這很有用,因爲您可以保證在翻譯中獲得某種文本,但是測試團隊可以確保翻譯存在。我編寫了一個python腳本來自動檢查翻譯文件,因爲我們有9種語言,每個翻譯有近1k個字符串。爲了測試這個,我們使用了一個非常簡單的sed腳本來創建pseudo-loc源字符串,所以如果翻譯缺失,僞loc文本將非常明顯。
關於編輯.ts文件的過程,我們將翻譯翻譯給了各個翻譯人員,爲他們提供了他們的語言的.ts文件,並且通常使用QT Linguist的時間約爲一小時。如果翻譯員在現場並希望立即在我們的設備上看到他們的翻譯,我寫了一個自動運行腳本,將生成的.qm文件放在我們嵌入式文件系統的正確位置,並重新啓動應用程序以顯示新的翻譯。如果他們不在現場,我們會通過上面提到的python腳本運行它們來檢查許多不同的問題,然後只需檢查.ts文件,以便下次啓動。
HTH
- 1. 翻譯Qt應用程序
- 2. 有沒有翻譯Localizable.strings文件的應用程序?
- 3. 在drupal中翻譯字符串在代碼中沒有英文默認
- 4. 的Android翻譯應用程序沒有在真實設備
- 5. 我的應用程序沒有「翻譯您的應用程序」鏈接
- 6. 編譯Qt3D沒有Qt源代碼
- 7. Qt Linguist - 設置應用程序的翻譯器
- 8. Django翻譯沒有顯示從應用程序的口
- 9. 翻譯文件,使用此代碼谷歌翻譯的Java API
- 10. Dashcode中的代碼翻譯
- 11. 本地化js沒有在響應應用程序中翻譯日期
- 12. 如何使用QTableWidgetItem文本在QT翻譯語言翻譯
- 13. 我想在Qt中翻譯我的應用程序,但出錯了,沒有結果
- 14. 在代碼中獲取Qt應用程序的版本
- 15. Java代碼翻譯
- 16. 沒有翻譯
- 17. 本地資源文件中代碼中字符串的翻譯
- 18. 與翻譯器的應用程序
- 19. Django的翻譯,嵌段沒有翻譯
- 20. 在Android代碼中的動畫翻譯
- 21. QsharedMemory沒有Qt應用程序
- 22. 幫我翻譯使用字節的Java代碼到jython代碼
- 23. 有沒有在我的C#應用程序中嵌入Bing字典(而不是bing翻譯器)的方法?
- 24. 將應用程序代碼放在QT應用程序上的位置?
- 25. 有翻譯計劃/ Java/Ruby代碼爲英文句子的程序嗎?
- 26. ASP.NET MVC 5 - @ C#代碼沒有在運行時被翻譯
- 27. Subsetting 700+的翻譯代碼
- 28. iframe google翻譯的代碼?
- 29. 翻譯使用Qt Linguist?
- 30. Qt - 使用內建翻譯
我的目標是沒有源代碼訪問的人可以調整文本(所有語言),而不需要某些進程來運行或重新計算某些內容。想象一下5種語言(包括「源語言」)會產生5個相同的格式化的,人類可讀的文件(例如xml)。我從QT得到的是數百個帶有文本的源文件,以及其他4種語言的一些經過處理的xml文件。 – Uwe
沒有任何東西阻止您將默認語言作爲另一種翻譯語言 - 如果找到匹配項,Qt將用翻譯後的值覆蓋源代碼值。 –
事實上,如果你想使用複數形式之類的東西,你*有*包括默認語言(比如說英語)的翻譯文件。我們正在爲我們的項目做這件事。 –