qt
多語言國際化主要體現在介面的語言切換,
語言切換的主體,即介面中需要翻譯的元素,要放在
qobject::tr()
」、「qobject::trutf8()」函式;確定了翻譯的主體後,就要對這些待翻譯元素進行翻譯,完成翻譯後會生成
qm檔案;當介面要切換語言時,只需要載入
qm檔案即可。
翻譯的過程主要分三步:
1. lupdate:提取待翻譯元素,生成
ts中間檔案
2. 寫翻譯內容:將
ts檔案中所有提取出來的待翻譯元素進行翻譯
3. lrelease:將翻譯好的檔案生成
qm檔案
作用:通過查詢qm檔案,返回sourcetext的翻譯文字
(當安裝了多個qm檔案時,查詢順序類似於棧的先進後出儲存模式:即先
搜尋最近安裝的qm檔案
,再搜尋之前
安裝的qm檔案)
引數說明:
(1) context通常是乙個類名(例如,
「mydialog」
);(2) sourcetext是
待翻譯文字內容;
(3) comment是消除歧義的注釋,當相同的
sourcetext
在同樣的上下文情況下被用在不同的規則中
,預設情況下是零;
(4) encoding表明字串
的編碼方式。
返回值:如果qm檔案中沒有包含context中
sourcetext
的翻譯,這個函式返回乙個和
sourcetext
相等的qstring
。sourcetext的編碼方式由
encoding
指定,它預設為
defaultcodec。
應用:
接下來看乙個例子(vs+qt):
在vs中新建乙個
qtgui
工程,通過
qt designer
選擇擺放控制項,修改
text
顯示內容,編譯工程,可以在
ui_***x.h
(根據ui
接下來生成ts檔案:
工程右鍵->「create new translation file」->選擇你想生成的語言,比如
demo
中原始控制項
text
為英文,要翻譯成中文,那麼
language
就選擇「中文(簡體,中國)」
此時工程目錄下會多一項translation files,裡面有
*.ts
檔案,當**中又增加了新的待翻譯元素時,右鍵這個ts檔案
->lupdate,即可將新增加的待翻譯元素更新到ts檔案中
接下來用qt linguist開啟
ts檔案,將待翻譯元素依次翻譯後儲存即可,或者可以直接使用文字編輯器開啟
ts檔案,每乙個
標籤內為乙個待翻譯元素,將翻譯寫到
標籤中儲存,
qt linguist
和文字編輯器都可以完成翻譯的操作,
在已經翻譯完成的ts檔案上右鍵
->irelease,即可生成*.qm檔案
生成了qm檔案後,就可以在程式中需要實現翻譯的位置載入該
qm檔案進行語言切換了:
qtranslator* translator = null;
//qm檔案的載入:
translator = new qtranslator;
if (translator->load("test_zh.qm"))
ui.retranslateui(this);
//qm檔案的刪除:
if (translator != null)
ui.retranslateui(this);
效果如下:
上圖中的demo可以在
vs2015+qt5.8.0
環境下直接編譯執行,如果開發平台版本不同,改一下專案屬性和
qt)。
注:qt只能翻譯字串,不能翻譯變數,即不存在tr(str),至於原因,就是你都不確定你要翻譯的是什麼(變數),qt linguist也就自然不知道為你提取出什麼來。。
qt 增加的翻譯沒有作用上 Qt翻譯檔案使用方法
1 在程式中載入翻譯檔案 qtranslator translator new qtranslator installtranslator translator 2 編輯.pro檔案 3 載入或生成新的ts檔案 ts是可讀的翻譯檔案,使用簡單的xml格式 4 編輯ts檔案 1 接上,在命令列視窗中執...
發布QtCsv檔案轉語言翻譯檔案工具
將csv格式檔案轉換為qm翻譯檔案,中間無需干預手動干預ts檔案即可完成翻譯檔案的製作。我們做qt翻譯檔案時候一般使用lupdate xx.pro生成ts檔案,再根據翻譯使用qt linguist manual工具修改ts後再使用lrelease ts生成對應的qm檔案。這一過程略顯繁瑣,作者的本意...
vs中結合Qt的UI檔案生成moc檔案的方法
前言 一點關於moc的小知識 qt是乙個跨平台的可提供使用者介面的應用程式開發框架,用於開發圖形使用者介面 gui 或非圖形使用者介面。qt使用標準的c 擴充套件包括訊號與插槽,是物件導向的框架,可生成特殊的元物件編譯器 meta object compiler,moc 易於擴充套件並且允許元件程式...