最近的乙個專案需要把系統從原先的英文版漢化。
為了完成這個工作,收集和學習了不少的資料。所以就自己整理資料留作記錄吧。
在網上你會發現很多關於qt顯示中文出現亂碼的現象:
於是你上網搜尋解決方案,不外乎以下三個語句:
qtextcodec::setcodecforlocale(qtextcodec::codecforname("gb2312"));
qtextcodec::setcodecforcstrings(qtextcodec::codecforname("gb2312"));
qtextcodec::setcodecfortr(qtextcodec::codecforname("gb2312"));
出現亂碼的原因主要是因為qt預設使用的編碼方式是:unicode;而windows中文系統的編碼方式:gbk等;編碼不一致所以出現亂碼。
ps:用上面的方式解決中文化不是最優的方式;最好的方式是使用英文版本,通過國際化提供其中文版本。
言歸正傳,說說翻譯問題.
qt內部採用的全
unicode
編碼,這從根本上保證了多國語介面實現的正確性和便捷性。
qt本身提供的
linguist
工具,用來實現翻譯過程十分方便。
qt國際化的使用首先就需要用到:tr();
出於國際化的需要,將需要在介面上顯示的文字都用tr()包起來。推薦的使用方式:
原始碼英文,然後提供英文到其他語言的翻譯包。
首先,把需要翻譯的文字使用tr()包裹起來;這點十分重要。因為qt的翻譯工具會把原始碼中所有的被tr()包裹起來的字串提取出來,用於下一步的操作。
其次,需要在工程檔案*.pro裡面新增語句:;擴充套件名為ts的檔案時翻譯檔案的原始檔。包含了所有被tr包裹的字串以及位置;
命名方式建議為:語言.ts例如:chinese.ts、english.ts等。需要幾個ts就新增幾個。
translations+= chinese.ts\
english.ts
再次,是使用lupdate工具編譯提取出ts檔案。使用方法如下:
windows下:執行中輸入cmd,進入到命令列視窗,使用cd語句進入到qt安裝目錄下的bin資料夾;
然後輸入:lupdate *.pro
*.pro
包含pro
檔案的全路徑。
lupdate
會解析*.pro
檔案,生成
translations
中的*.ts
檔案現在回在工程目錄先看到*.ts檔案。
ubuntu下:開啟終端,如果lupdate已經在bin目錄下直接執行。如果沒有則同windows下的操作相同。
最後,使用qt自帶的linguist工具開啟*.ts檔案按照提示把每個需要翻譯的字串一一翻譯,並且儲存生成release版本:即*.qm檔案
*.qm檔案是我們最後需要的二進位制檔案。它取出了很多不需要的資訊。體積比*.ts檔案小很多。
以上步驟我們已經獲得了需要的翻譯檔案:*.qm;接下來我們需要載入這個檔案來實現翻譯。
實現方式有兩種:
**如下:
int main(int argc,char* argv)
這個方式就是啟動程式時候直接載入翻譯檔案。
動態載入需要給視窗定義乙個動態載入的函式:
void qtest::sl_translate()
else
retranslatorui();
}
這是乙個qt的slots函式,這裡m_ptranslator是乙個qtranslator的類指標。ischinese是乙個flags用於判斷當前的語言。
這裡涉及到了翻譯檔案的安裝與解除安裝。
使用這個函式可以進行動態載入。 注:
這裡會有些人發現自己的函式呼叫了、載入翻譯檔案也成功了。可是介面的文字部分甚至於所有的字元轉都沒有轉換到對應的語言,這是為什麼呢?
其實細心的人已經發現我函式最後一行呼叫了函式:retranslatorui();
如果你的介面是由designer設計的那麼你會發現那裡有個函式:retranslateui();載入翻譯檔案時候程式會自動呼叫這些語句以實現語言轉換。
例如:
void qtest::retranslatorui()
這樣我們的步驟就都結束了。
這裡是乙個簡單的例子:translate
轉貼 國際化 本地化和中文化
國際化 本地化和多語言化的概念 一般來說,國際化 是指把原來為英文設計的計算機系統或應用 軟體改寫為同時支援多種語言和文化習俗的過程 在軟體創作的初期,一般的程式語言,編譯,開發都是只支援英文的,為了適應更廣的語言 和文化習俗,軟體有必要在設計結構和機制上支援多語言的擴充套件特性,這一過程稱為國際化...
QT國際化支援
為了是我們的qt程式支援如中文等其他語言,通常的做法是在需要翻譯的地方顯示的用tr標記,所以你在閱讀其他人編寫的源程式時會看到很多字串做了tr標記,這樣做是有原因的。1.在hello.pro檔案中增加 translations hello zh cn.ts 2.進入工程目錄,執行 lupdate h...
QT國際化 小結
qt應用程式的國際化問題,應該總的來說還是比較容易的,如果你原始碼中沒有使用漢字,直接使用英文,這個問題就不大,下面我講的是通過在原始碼中直接使用中文 就是本地化了的 然後把中文翻譯成別的文字而言的 例如加密文字 大致分這麼幾個步驟,基本與對英文進行國際化的步驟差不多 這裡是針對windows平台的...