通過qt linguist
翻譯應用程式執行ludata工具
,提取要翻譯的文字,生成.ts
檔案,這個檔案是xml
格式的。
開啟qt linguist
進行翻譯。
執行lrelease工具
,生成.qm
檔案,這個乙個根據.ts
生成的檔案,供我們翻譯時使用。這裡的.ts
和.qm
均與平台無關。
.pro
translations +
= cn.ts
translations +
= en.ts
.h
#ifndef mainwindow_h
#define mainwindow_h
#include
#include
namespace ui
class
mainwindow
:public qmainwindow
;#endif
// mainwindow_h
.cpp
#include
"mainwindow.h"
#include
"ui_mainwindow.h"
#include
"qdebug"
mainwindow::
mainwindow
(qwidget *parent)
:qmainwindow
(parent),ui
(new ui::mainwindow)
mainwindow::
~mainwindow()
void mainwindow::
changeevent
(qevent* event)
// qwidget::
changeevent
(event);}
void mainwindow::
on_combobox_activated
(int index)
if(index ==1)
}
主要邏輯如下:
translator.
load
("***.qm");
>
installtranslator
(&translator )
;
ui-
>
retranslateui
(this
);
若存在待翻譯的combox
,很快我們就發現,原先選擇的內容在翻譯後又變成了首項。
問題出現在retranslateui()
中,上文我們使用的是ui->retranslateui(this)
;它位於ui_mainwindow.h
中,關於combox
的翻譯其實現如下:
combobox-
>
clear()
;combobox-
>
insertitems(0
,qstringlist()
translate
("mainwindow"
,"english"
, q_nullptr)
translate
("mainwindow"
,"\344\270\255\346\226\207"
, q_nullptr)
);
原來預設使用的是將combox
清空再新增可選項的做法。怪不得每次currindex
都會丟失。
解決的方法也很簡單,我們自己實現retranslateui()
,增加currentindex
變數儲存combox
當前選中的狀態。
void mainwindow::
retranslateui()
毫無疑問這必須將語言資訊儲存到本地。本處採用 qsetting。
void mainwindow::
closeevent
(qcloseevent *event)
//讀取語言設定
int index;
qsettings settings
("fsf"
,"test");
settings.
begingroup
("mainwindows");
index = settings.
value
("language",0
).toint()
;settings.
endgroup()
;if(index ==0)
if(index ==1)
題外話也可以根據系統環境來進行語言設定;獲取本地語言環境的方法如下:
qlocale::
system()
.name
()
對於類似ctrl+q
之類的加速鍵,如果採用硬編碼qt::ctrl
+qt::key_q
,那麼翻譯無法將它們覆蓋。正確的習慣用法為:
//建立動作
exitact =
newqaction(tr
("e&xit").
this);
//設定快捷鍵
exitact-
>
setshortcuts
(qkeysequence::quit)
;
對於有些待翻譯的字串,若其中含有變數不需要翻譯則需要使用該方式:
qmessagebox::
information
(null,tr
("path"),
tr("you selected\n%1").
arg(path));
qmessagebox::
information
(null,tr
("path"),
"you selected\n"
+ path)
;
需要在類定義時使用q_declare_tr_functions
巨集:
class
myclass
僅需在其他介面中重寫changeevent,呼叫retranslateui更新文字即可。 QT國際化 小結
qt應用程式的國際化問題,應該總的來說還是比較容易的,如果你原始碼中沒有使用漢字,直接使用英文,這個問題就不大,下面我講的是通過在原始碼中直接使用中文 就是本地化了的 然後把中文翻譯成別的文字而言的 例如加密文字 大致分這麼幾個步驟,基本與對英文進行國際化的步驟差不多 這裡是針對windows平台的...
QT國際化支援
為了是我們的qt程式支援如中文等其他語言,通常的做法是在需要翻譯的地方顯示的用tr標記,所以你在閱讀其他人編寫的源程式時會看到很多字串做了tr標記,這樣做是有原因的。1.在hello.pro檔案中增加 translations hello zh cn.ts 2.進入工程目錄,執行 lupdate h...
qt國際化程式設計
下面說一下qt國際化程式設計的操作步驟 1 編寫源 2 在 pro檔案中新增translations ts 有多少中語言就新增多少個ts檔案。3 執行lupdate pro 生成ts檔案。lupdate會根據源 中的內容提取出待翻譯的字段,然後生成ts檔案,ts檔案是xml格式的。4 用qt lin...