運(yùn)行環(huán)境:Ubuntu20.04
運(yùn)行Qt版本:Qt5.14.2(網(wǎng)友說需要Qt5.10以上版本才可以)
實(shí)現(xiàn)前提:所有的qml中需要翻譯的文字前都要加“qsTr”例如:qsTr("文本")
操作步驟:
一.編輯工程文件
1.首先在工程文件.pro中加入TRANSLATIONS = zh_CN.ts en_US.ts兩個(gè)翻譯文件, 支持中英文兩種語言切換,后面可以跟上路徑例如:Lang/zh_CN.ts,這樣生成ts文件后就會(huì)再Lang文件夾下
2.在工程文件上添加需要翻譯的文件
lupdate_only{
SOURCES += \
*.qml\
setting/*.qml\
} //需要翻譯的文件相對(duì)路徑,可以通配符,不用一個(gè)個(gè)的輸入名字
二、生成ts文件:
工程文件配置后,運(yùn)行l(wèi)update,點(diǎn)擊(工具->外部->Qt語言家->更新翻譯(lupdate));這時(shí)候就從運(yùn)用程序中,工程文件上(lupdate_only)添加的翻譯文件,提取所有經(jīng)過qsTr()標(biāo)識(shí)過的字符串(qsTr("hello")),生成后綴為.ts文件,文件的命名和路徑根據(jù)工程文件配置。
三、編輯ts文件
使用Qt Linguist打開翻譯需要翻譯的.ts文件,然后在Linguist 發(fā)布生成相應(yīng)的qm文件(文件->發(fā)布);
或者使用QT(工具->外部->Qt語言家->更新翻譯(lrelease))發(fā)布生成相應(yīng)的qm文件。
注意的在電腦上調(diào)試運(yùn)行,不需要添加入qrc資源文件也是可以的,如果不是,我們需要將qm文件添加到qrc資源文件上。
四、代碼實(shí)現(xiàn)切換
void QmlLanguage::setLanguage(int nLanguage)
{
QTranslator translator;
if (nLanguage == 0)
{
translator.load(":/en_US.qm");
}else{
translator.load(":/zh_CN.qm");
}
m_app->installTranslator(&translator);
m_engine->retranslate();
}
重點(diǎn)的是這句 m_engine->retranslate(); Qt5.10的新方法, 使Qml界面全部動(dòng)態(tài)重新翻譯
缺點(diǎn):1.動(dòng)態(tài)翻譯切換的時(shí)候還會(huì)顯示原來的語言,重啟后才完全生效,暫時(shí)還沒完全解決,看taoquick的里面用的json解決,還沒嘗試
2.主要適用于單頁面,如果多個(gè)頁面切換動(dòng)態(tài)切換時(shí)需要每個(gè)頁面都設(shè)置一次
注意事項(xiàng):ts里面要設(shè)置好語言:中文要包含
<TS version="2.1" language="zh_CN" sourcelanguage="zh_CN">
英文:
<TS version="2.1" language="en_US" sourcelanguage="zh_CN">
要不會(huì)失敗