QT学习:多国语言国际化
一、國際化支持的實現
(1)使用QString對象表示所有用戶可見的文本。由于QString內部使用Unicode編碼實現,所以它可以用于表示所有需要向用戶呈現的文本。當然,對于僅程序員可見的文本并不需要都變為QString對象,可利用Qt提供的QCString或原始的“char”。
(2)使用tr()函數獲取所有需要翻譯的文本。在Qt的翻譯機制下,QObject::tr()函數可以幫助程序員取得翻譯之后的文本。對于從QObject繼承而來的類,QObject::tr()函數最終由QMetaObject::tr()實現。在某些時候,如果無法使用QObject::tr()函數,則可以直接調用QCoreApplication::translate()取得翻譯之后的字符串。
(3)使用QString::arg()方法組織動態文本。有些時候,一段文本需要由一些靜態文本和動態變量組合起來,如常見的情況“printf(“The value of i is: %d”, i)”。對于這種動態文本的翻譯,由于語言習慣的問題,如果簡單地采用這種連接字符串的方法,則可能會帶來一些問題,如下面的字符串用于表示任務的完成情況:
其中,x和y是動態的變量,三個字符串被x和y分隔開,它們能夠被很好地編譯,因為“x of y”是英語中分數的表示方法,如4 of 5是分數4/5,在不同的語言中,分子和分母的位置可能是顛倒的,在這種情況下,數字4和5的位置在翻譯時無法被正確地放置。由此可見,孤立地翻譯被分隔開的字符串是不行的,改進的辦法是使用 QString:: arg()方法:
QString m = tr("Mission status: %1 of %2 are completed").arg(x).arg(y);(4)利用QTranslator::load()和QCoreApplication::installTranslator()函數讀取對應的翻譯之后的資源文件。翻譯工作者將提供包含翻譯之后的字符串的資源文件“*.qm”,程序員還需要做的是定義QTranslator對象,并使用 load()函數讀取相應的“.qm”文件,利用QCoreApplication:: installTranslator()函數安裝QTranslator對象。
二、翻譯工作:“*.qm”文件的生成
對于翻譯工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease(它們都可以在Qt安裝目錄的 “bin”文件夾下找到)協助翻譯工作并生成最后需要的“.qm”文件,它包括以下內容。
(1)利用lupdate工具從源代碼中掃描并提取需要翻譯的字符串,生成“.ts”文件。類似編譯時用到的 qmake,運行lupdate時也需要指定一個“.pro”的文件,可以單獨創建這個“.pro”文件,也可以利用編譯時用到 的“.pro”文件,只需定義好變量TRANSLATIONS即可。
(2)利用linguist工具來協助完成翻譯工作,即打開前面用lupdate生成的“.ts”文件,對其中的字符串逐 條進行翻譯并保存。由于“.ts”文件采用了XML格式,所以也可以使用其他編輯器來打開“.ts”文件并翻譯。
(3)利用lrelease工具處理翻譯好的“.ts”文件,生成格式更為緊湊的“.qm”文件。這便是翻譯工作者最終需要提供的資源文件,它所占的空間比“.ts”文件小,但基本不具有可讀性,只有QTranslator能夠正確地識別它。
總結
以上是生活随笔為你收集整理的QT学习:多国语言国际化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT学习:Qt对Office的基本读写
- 下一篇: QT学习:Qt 5.11.1+OpenC