




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第15章
Qt5多國語言國際化——基本概念第15章Qt5多國語言國際化——基本概念01國際化支持的實(shí)現(xiàn)01國際化支持的實(shí)現(xiàn)2國際化支持的實(shí)現(xiàn)(1)使用QString對(duì)象表示所有用戶可見的文本。由于QString內(nèi)部使用Unicode編碼實(shí)現(xiàn),所以它可以用于表示所有需要向用戶呈現(xiàn)的文本。當(dāng)然,對(duì)于僅程序員可見的文本并不需要都變?yōu)镼String對(duì)象,可利用Qt提供的QCString或原始的“char*”。(2)使用tr()函數(shù)獲取所有需要翻譯的文本。在Qt的翻譯機(jī)制下,QObject::tr()函數(shù)可以幫助程序員取得翻譯之后的文本。對(duì)于從QObject繼承而來的類,QObject::tr()函數(shù)最終由QMetaObject::tr()實(shí)現(xiàn)。在某些時(shí)候,如果無法使用QObject::tr()函數(shù),則可以直接調(diào)用QCoreApplication::translate()取得翻譯之后的字符串。(3)使用QString::arg()方法組織動(dòng)態(tài)文本。有些時(shí)候,一段文本需要由一些靜態(tài)文本和動(dòng)態(tài)變量組合起來,如常見的情況“printf("Thevalueofiis:%d",i)”。對(duì)于這種動(dòng)態(tài)文本的翻譯,由于語言習(xí)慣的問題,如果簡單地采用這種連接字符串的方法,則可能會(huì)帶來一些問題,如下面的字符串用于表示任務(wù)的完成情況:QStringm=tr("Missionstatus:")+x+tr("of")+y+tr("arecompleted");其中,x和y是動(dòng)態(tài)的變量,三個(gè)字符串被x和y分隔開,它們能夠被很好地編譯,因?yàn)椤皒ofy”是英語中分?jǐn)?shù)的表示方法,如4of5是分?jǐn)?shù)4/5,在不同的語言中,分子和分母的位置可能是顛倒的,在這種情況下,數(shù)字4和5的位置在翻譯時(shí)無法被正確地放置。由此可見,孤立地翻譯被分隔開的字符串是不行的,改進(jìn)的辦法是使用QString::arg()方法:QStringm=tr("Missionstatus:%1of%2arecompleted").arg(x).arg(y);(4)利用QTranslator::load()和QCoreApplication::installTranslator()函數(shù)讀取對(duì)應(yīng)的翻譯之后的資源文件。翻譯工作者將提供包含翻譯之后的字符串的資源文件“*.qm”,程序員還需要做的是定義QTranslator對(duì)象,并使用load()函數(shù)讀取相應(yīng)的“.qm”文件,利用QCoreApplication::installTranslator()函數(shù)安裝QTranslator對(duì)象。國際化支持的實(shí)現(xiàn)(1)使用QString對(duì)象表示所有用戶可見302翻譯工作:“*.qm”文件的生成02翻譯工作:“*.qm”文件的生成4翻譯工作:“*.qm”文件的生成對(duì)于翻譯工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease(它們都可以在Qt安裝目錄的“bin”文件夾下找到)協(xié)助翻譯工作并生成最后需要的“.qm”文件,它包括以下內(nèi)容。(1)利用lupdate工具從源代碼中掃描并提取需要翻譯的字符串,生成“.ts”文件。類似編譯時(shí)用到的qmake,運(yùn)行l(wèi)update時(shí)也需要指定一個(gè)“.pro”的文件,可以單獨(dú)創(chuàng)建這個(gè)“.pro”文件,也可以利用編譯時(shí)用到的“.pro”文件,只需定義好變量TRANSLATIONS即可。(2)利用linguist工具來協(xié)助完成翻譯工作,即打開前面用lupdate生成的“.ts”文件,對(duì)其中的字符串逐條進(jìn)行翻譯并保存。由于“.ts”文件采用了XML格式,所以也可以使用其他編輯器來打開“.ts”文件并翻譯。(3)利用lrelease工具處理翻譯好的“.ts”文件,生成格式更為緊湊的“.qm”文件。這便是翻譯工作者最終需要提供的資源文件,它所占的空間比“.ts”文件小,但基本不具有可讀性,只有QTranslator能夠正確地識(shí)別它。翻譯工作:“*.qm”文件的生成對(duì)于翻譯工作者,主要是利用Q5第15章
Qt5多國語言國際化——【實(shí)例】語言國際化應(yīng)用第15章Qt5多國語言國際化——【實(shí)例】語言國際化應(yīng)用01簡
單
測(cè)
試01簡單測(cè)試7簡單測(cè)試【例】(簡單)(CH1501)多國語言國際化。操作步驟如下。(1)新建一個(gè)GUI工程“TestH”,在UI界面上添加兩個(gè)按鈕,并分別將文本修改為hello、china,如圖15.1所示。(2)修改“TestH”文件,添加如下代碼:TRANSLATIONS=TestHello.ts(3)編譯。記住,一定要先編譯,如果沒有編譯就進(jìn)行下面的步驟,則生成的“.ts”文件只是一個(gè)僅有標(biāo)題欄的框架。簡單測(cè)試【例】(簡單)(CH1501)多國語言國際化。(2)8簡單測(cè)試(4)編譯完成后,選擇“開始”→“所有程序”→“Qt5.11.1”→“5.11.1”→“MinGW5.3.0(32-bit)”→“Qt5.11.1forDesktop(MinGW5.3.032bit)”菜單項(xiàng),打開命令行窗口,進(jìn)入“TestH”工程目錄,執(zhí)行命令:lupdateTestH在工程下生成一個(gè)“.ts”文件,如果沒有編譯,則提示“Found1sourcetext”。若已經(jīng)編譯,則提示“Found3sourcetext(s)”,如圖15.2所示。簡單測(cè)試(4)編譯完成后,選擇“開始”→“所有程序”→“Qt9簡單測(cè)試(5)選擇“開始”→“所有程序”→“Qt5.11.1”→“5.11.1”→“MinGW5.3.0(32-bit)”→“Linguist”菜單項(xiàng),運(yùn)行Qt自帶工具linguist(Qt語言家),其主界面如圖15.3所示。簡單測(cè)試(5)選擇“開始”→“所有程序”→“Qt5.11.10簡單測(cè)試在主界面上選擇“文件”→“打開”菜單項(xiàng),選擇“TestHello.ts”文件,單擊“打開”按鈕,根據(jù)需要設(shè)置源語言和目標(biāo)語言,此處為默認(rèn)狀態(tài):源語言為任意國家語言,目標(biāo)語言為China的Chinese,如圖15.4所示。簡單測(cè)試在主界面上選擇“文件”→“打開”菜單項(xiàng),選擇“Tes11簡單測(cè)試(6)在第二欄中選擇要翻譯的字符串,在下面兩行中輸入對(duì)應(yīng)的翻譯文字,單擊上面的
按鈕,如圖15.5所示。當(dāng)翻譯全部完成(這里,“MainWindow”譯為“主窗口”;“hello”譯為“你好”;“China”譯為“中國”)后,保存退出。簡單測(cè)試(6)在第二欄中選擇要翻譯的字符串,在下面兩行中輸入12簡單測(cè)試(7)選擇“文件”→“發(fā)布”菜單項(xiàng),或者在命令行中輸入“l(fā)releaseTestH”,生成“TestHello.qm”文件,如圖15.6所示。簡單測(cè)試(7)選擇“文件”→“發(fā)布”菜單項(xiàng),或者在命令行中輸13簡單測(cè)試(8)修改源代碼,其中,加黑語句為需要添加的部分。具體代碼如下:#include<QTranslator>intmain(intargc,char*argv[]){ QApplicationa(argc,argv);
QTranslator*translator=newQTranslator;
translator->load("D:/Qt/CH15/CH1501/TestHello/TestHello.qm");
a.installTranslator(translator); MainWindoww; w.show(); returna.exec();}簡單測(cè)試(8)修改源代碼,其中,加黑語句為需要添加的部分。#14簡單測(cè)試(9)運(yùn)行程序,效果如圖15.7所示??梢钥吹剑藭r(shí)窗體的標(biāo)題和按鈕文本都變?yōu)橹形?,說明翻譯轉(zhuǎn)換成功!簡單測(cè)試(9)運(yùn)行程序,效果如圖15.7所示。1502選擇語言翻譯文字02選擇語言翻譯文字16選擇語言翻譯文字【例】(簡單)(CH1502)用一個(gè)下拉菜單來選擇語言,并且下面有一個(gè)需要翻譯文字的標(biāo)簽。操作步驟如下。(1)在頭文件“LangSwitch.h”中定義LangSwitch類,創(chuàng)建用戶界面。#include<QWidget>#include<QComboBox>#include<QLabel>classLangSwitch:publicQWidget{Q_OBJECTpublic:LangSwitch(QWidget*parent=0);~LangSwitch();privateslots:voidchangeLang(intindex); //(a)private:voidcreateScreen(); //(b)voidchangeTr(constQString&langCode);voidrefreshLabel();QComboBox*combo; //在界面中可以看見的下拉菜單QLabel*label; //在界面中可以看見的標(biāo)簽};選擇語言翻譯文字【例】(簡單)(CH1502)用一個(gè)下拉菜單17選擇語言翻譯文字(2)源文件“LangSwitch.cpp”中的具體實(shí)現(xiàn)代碼如下:#include"langswitch.h"#include<QVBoxLayout>#include<QTranslator>#include<QApplication>LangSwitch::LangSwitch(QWidget*parent):QWidget(parent){createScreen();}LangSwitch::~LangSwitch(){}選擇語言翻譯文字(2)源文件“LangSwitch.cpp”18選擇語言翻譯文字createScreen()函數(shù)用于創(chuàng)建基本的界面,其具體實(shí)現(xiàn)代碼如下:voidLangSwitch::createScreen(){combo=newQComboBox;combo->addItem("English","en"); //(a)combo->addItem("Chinese","zh");combo->addItem("Latin","la");label=newQLabel;refreshLabel(); //設(shè)置標(biāo)簽的內(nèi)容QVBoxLayout*layout=newQVBoxLayout;layout->addWidget(combo,1);layout->addWidget(label,5);setLayout(layout);connect(combo,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int))); //(b)}選擇語言翻譯文字createScreen()函數(shù)用于創(chuàng)建基本19選擇語言翻譯文字其中,(a)combo->addItem("English","en")、combo->addItem("Chinese","zh")和combo->addItem("Latin","la"):將三個(gè)語言選項(xiàng)(英文、中文和拉丁文)添加到下拉菜單中,并設(shè)置三個(gè)選項(xiàng)的值分別為“en”、“zh”和“l(fā)a”(這是ISO標(biāo)準(zhǔn)中語言的簡寫形式)。(b)changeLang(int):改變語言。refreshLabel()函數(shù)的具體實(shí)現(xiàn)如下:voidLangSwitch::refreshLabel(){label->setText(tr("TXT_HELLO_WORLD","HelloWorld")); //(a)}其中,(a)label->setText(tr("TXT_HELLO_WORLD","HelloWorld")):tr()函數(shù)前一個(gè)參數(shù)是提取翻譯串時(shí)用到的ID,后一個(gè)則起提供注釋的作用,并且在找不到翻譯串時(shí),注釋串會(huì)被采用。例如,語言設(shè)置為中文時(shí),如果以TXT_HELLO_WORLD為ID的串在對(duì)應(yīng)的“.qm”文件中找不到翻譯后的字符串,則將采用后一個(gè)參數(shù),即顯示為英文。選擇語言翻譯文字其中,voidLangSwitch::re20選擇語言翻譯文字changeLang()函數(shù)改變語言的具體代碼如下:voidLangSwitch::changeLang(intindex){QStringlangCode=combo->itemData(index).toString(); //(a)changeTr(langCode); //讀取相應(yīng)的“.qm”文件refreshLabel(); //刷新標(biāo)簽上的文字}其中,(a)QStringlangCode=combo->itemData(index).toString():從所選的菜單項(xiàng)中取得對(duì)應(yīng)語言的值(“en”、“zh”和“l(fā)a”)。選擇語言翻譯文字changeLang()函數(shù)改變語言的具體代21選擇語言翻譯文字changeTr()函數(shù)讀取對(duì)應(yīng)的“.qm”文件,并調(diào)用installTranslator()方法安裝QTranslator對(duì)象,其具體實(shí)現(xiàn)代碼如下:voidLangSwitch::changeTr(constQString&langCode){staticQTranslator*translator; //(a)if(translator!=NULL){ qApp->removeTranslator(translator); deletetranslator; translator=NULL;}translator=newQTranslator;QStringqmFilename="lang_"+langCode; //(b)if(translator->load(QString("D:/Qt/CH15/CH1502/LangSwitch/")+qmFilename)){ qApp->installTranslator(translator);}}其中,(a)staticQTranslator*translator:由于需要?jiǎng)討B(tài)改變語言,所以如果已經(jīng)安裝了QTranslator對(duì)象,則首先需要調(diào)用removeTranslator()函數(shù)移除原來的QTranslator對(duì)象,再安裝新的對(duì)象。因此,定義了一個(gè)static的QTranslator對(duì)象以方便移除和重新安裝。(b)QStringqmFilename="lang_"+langCode:將“.qm”文件的路徑設(shè)定在項(xiàng)目“D:\Qt\CH15\CH1502\LangSwitch”路徑下,分別命名為lang_en.qm、lang_zh.qm和lang_la.qm。選擇語言翻譯文字changeTr()函數(shù)讀取對(duì)應(yīng)的“.qm”22選擇語言翻譯文字(3)提取需要翻譯的字符串并翻譯,生成“.qm”文件(這個(gè)工作通常由專門的工作組負(fù)責(zé)),具體操作如下。①修改“”文件,即在后面加上TRANSLATIONS的定義(加黑部分代碼)。修改完的“”文件的具體內(nèi)容如下:TARGET=LangSwitchTEMPLATE=appSOURCES+=main.cpp\langswitch.cppHEADERS+=langswitch.hTRANSLATIONS=lang_en.ts\
lang_zh.ts\
lang_la.ts此時(shí),運(yùn)行結(jié)果如圖15.8所示。選擇語言翻譯文字(3)提取需要翻譯的字符串并翻譯,生成“.q23選擇語言翻譯文字②利用lupdate工具提取需要翻譯的字符串,執(zhí)行l(wèi)update命令及結(jié)果如圖15.9所示。
此時(shí),得到了lang_en.ts、lang_zh.ts和lang_la.ts共三個(gè)文件。但是,因?yàn)镮D為TXT_HELLO_WORLD的字符串尚未被翻譯,所以需要完成如下工作。選擇語言翻譯文字②利用lupdate工具提取需要翻譯的字符24選擇語言翻譯文字(a)利用linguist工具翻譯這幾個(gè)“.ts”文件。直接利用Qt的linguist工具打開需要翻譯的“.ts”文件,就可以進(jìn)行字符串的翻譯,這里三個(gè)版本的字符串分別譯為“HelloWorld”(English)、“你好,世界”(Chinese)和“Orbis,tesaluto”(Latin),翻譯完成后保存退出,如圖15.10所示。選擇語言翻譯文字(a)利用linguist工具翻譯這幾個(gè)“.25選擇語言翻譯文字(b)生成各個(gè)“.ts”文件相應(yīng)的“.qm”文件。這個(gè)工作可以利用lrelease工具來完成,其用法與lupdate工具相同,只是改用命令“l(fā)releaseLangS”,執(zhí)行l(wèi)release命令如圖15.11所示。上述所有準(zhǔn)備工作完成后,便可運(yùn)行程序,不同版本的界面如圖15.12所示。
選擇語言翻譯文字(b)生成各個(gè)“.ts”文件相應(yīng)的“.qm”26第15章
Qt5多國語言國際化——基本概念第15章Qt5多國語言國際化——基本概念01國際化支持的實(shí)現(xiàn)01國際化支持的實(shí)現(xiàn)28國際化支持的實(shí)現(xiàn)(1)使用QString對(duì)象表示所有用戶可見的文本。由于QString內(nèi)部使用Unicode編碼實(shí)現(xiàn),所以它可以用于表示所有需要向用戶呈現(xiàn)的文本。當(dāng)然,對(duì)于僅程序員可見的文本并不需要都變?yōu)镼String對(duì)象,可利用Qt提供的QCString或原始的“char*”。(2)使用tr()函數(shù)獲取所有需要翻譯的文本。在Qt的翻譯機(jī)制下,QObject::tr()函數(shù)可以幫助程序員取得翻譯之后的文本。對(duì)于從QObject繼承而來的類,QObject::tr()函數(shù)最終由QMetaObject::tr()實(shí)現(xiàn)。在某些時(shí)候,如果無法使用QObject::tr()函數(shù),則可以直接調(diào)用QCoreApplication::translate()取得翻譯之后的字符串。(3)使用QString::arg()方法組織動(dòng)態(tài)文本。有些時(shí)候,一段文本需要由一些靜態(tài)文本和動(dòng)態(tài)變量組合起來,如常見的情況“printf("Thevalueofiis:%d",i)”。對(duì)于這種動(dòng)態(tài)文本的翻譯,由于語言習(xí)慣的問題,如果簡單地采用這種連接字符串的方法,則可能會(huì)帶來一些問題,如下面的字符串用于表示任務(wù)的完成情況:QStringm=tr("Missionstatus:")+x+tr("of")+y+tr("arecompleted");其中,x和y是動(dòng)態(tài)的變量,三個(gè)字符串被x和y分隔開,它們能夠被很好地編譯,因?yàn)椤皒ofy”是英語中分?jǐn)?shù)的表示方法,如4of5是分?jǐn)?shù)4/5,在不同的語言中,分子和分母的位置可能是顛倒的,在這種情況下,數(shù)字4和5的位置在翻譯時(shí)無法被正確地放置。由此可見,孤立地翻譯被分隔開的字符串是不行的,改進(jìn)的辦法是使用QString::arg()方法:QStringm=tr("Missionstatus:%1of%2arecompleted").arg(x).arg(y);(4)利用QTranslator::load()和QCoreApplication::installTranslator()函數(shù)讀取對(duì)應(yīng)的翻譯之后的資源文件。翻譯工作者將提供包含翻譯之后的字符串的資源文件“*.qm”,程序員還需要做的是定義QTranslator對(duì)象,并使用load()函數(shù)讀取相應(yīng)的“.qm”文件,利用QCoreApplication::installTranslator()函數(shù)安裝QTranslator對(duì)象。國際化支持的實(shí)現(xiàn)(1)使用QString對(duì)象表示所有用戶可見2902翻譯工作:“*.qm”文件的生成02翻譯工作:“*.qm”文件的生成30翻譯工作:“*.qm”文件的生成對(duì)于翻譯工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease(它們都可以在Qt安裝目錄的“bin”文件夾下找到)協(xié)助翻譯工作并生成最后需要的“.qm”文件,它包括以下內(nèi)容。(1)利用lupdate工具從源代碼中掃描并提取需要翻譯的字符串,生成“.ts”文件。類似編譯時(shí)用到的qmake,運(yùn)行l(wèi)update時(shí)也需要指定一個(gè)“.pro”的文件,可以單獨(dú)創(chuàng)建這個(gè)“.pro”文件,也可以利用編譯時(shí)用到的“.pro”文件,只需定義好變量TRANSLATIONS即可。(2)利用linguist工具來協(xié)助完成翻譯工作,即打開前面用lupdate生成的“.ts”文件,對(duì)其中的字符串逐條進(jìn)行翻譯并保存。由于“.ts”文件采用了XML格式,所以也可以使用其他編輯器來打開“.ts”文件并翻譯。(3)利用lrelease工具處理翻譯好的“.ts”文件,生成格式更為緊湊的“.qm”文件。這便是翻譯工作者最終需要提供的資源文件,它所占的空間比“.ts”文件小,但基本不具有可讀性,只有QTranslator能夠正確地識(shí)別它。翻譯工作:“*.qm”文件的生成對(duì)于翻譯工作者,主要是利用Q31第15章
Qt5多國語言國際化——【實(shí)例】語言國際化應(yīng)用第15章Qt5多國語言國際化——【實(shí)例】語言國際化應(yīng)用01簡
單
測(cè)
試01簡單測(cè)試33簡單測(cè)試【例】(簡單)(CH1501)多國語言國際化。操作步驟如下。(1)新建一個(gè)GUI工程“TestH”,在UI界面上添加兩個(gè)按鈕,并分別將文本修改為hello、china,如圖15.1所示。(2)修改“TestH”文件,添加如下代碼:TRANSLATIONS=TestHello.ts(3)編譯。記住,一定要先編譯,如果沒有編譯就進(jìn)行下面的步驟,則生成的“.ts”文件只是一個(gè)僅有標(biāo)題欄的框架。簡單測(cè)試【例】(簡單)(CH1501)多國語言國際化。(2)34簡單測(cè)試(4)編譯完成后,選擇“開始”→“所有程序”→“Qt5.11.1”→“5.11.1”→“MinGW5.3.0(32-bit)”→“Qt5.11.1forDesktop(MinGW5.3.032bit)”菜單項(xiàng),打開命令行窗口,進(jìn)入“TestH”工程目錄,執(zhí)行命令:lupdateTestH在工程下生成一個(gè)“.ts”文件,如果沒有編譯,則提示“Found1sourcetext”。若已經(jīng)編譯,則提示“Found3sourcetext(s)”,如圖15.2所示。簡單測(cè)試(4)編譯完成后,選擇“開始”→“所有程序”→“Qt35簡單測(cè)試(5)選擇“開始”→“所有程序”→“Qt5.11.1”→“5.11.1”→“MinGW5.3.0(32-bit)”→“Linguist”菜單項(xiàng),運(yùn)行Qt自帶工具linguist(Qt語言家),其主界面如圖15.3所示。簡單測(cè)試(5)選擇“開始”→“所有程序”→“Qt5.11.36簡單測(cè)試在主界面上選擇“文件”→“打開”菜單項(xiàng),選擇“TestHello.ts”文件,單擊“打開”按鈕,根據(jù)需要設(shè)置源語言和目標(biāo)語言,此處為默認(rèn)狀態(tài):源語言為任意國家語言,目標(biāo)語言為China的Chinese,如圖15.4所示。簡單測(cè)試在主界面上選擇“文件”→“打開”菜單項(xiàng),選擇“Tes37簡單測(cè)試(6)在第二欄中選擇要翻譯的字符串,在下面兩行中輸入對(duì)應(yīng)的翻譯文字,單擊上面的
按鈕,如圖15.5所示。當(dāng)翻譯全部完成(這里,“MainWindow”譯為“主窗口”;“hello”譯為“你好”;“China”譯為“中國”)后,保存退出。簡單測(cè)試(6)在第二欄中選擇要翻譯的字符串,在下面兩行中輸入38簡單測(cè)試(7)選擇“文件”→“發(fā)布”菜單項(xiàng),或者在命令行中輸入“l(fā)releaseTestH”,生成“TestHello.qm”文件,如圖15.6所示。簡單測(cè)試(7)選擇“文件”→“發(fā)布”菜單項(xiàng),或者在命令行中輸39簡單測(cè)試(8)修改源代碼,其中,加黑語句為需要添加的部分。具體代碼如下:#include<QTranslator>intmain(intargc,char*argv[]){ QApplicationa(argc,argv);
QTranslator*translator=newQTranslator;
translator->load("D:/Qt/CH15/CH1501/TestHello/TestHello.qm");
a.installTranslator(translator); MainWindoww; w.show(); returna.exec();}簡單測(cè)試(8)修改源代碼,其中,加黑語句為需要添加的部分。#40簡單測(cè)試(9)運(yùn)行程序,效果如圖15.7所示??梢钥吹?,此時(shí)窗體的標(biāo)題和按鈕文本都變?yōu)橹形?,說明翻譯轉(zhuǎn)換成功!簡單測(cè)試(9)運(yùn)行程序,效果如圖15.7所示。4102選擇語言翻譯文字02選擇語言翻譯文字42選擇語言翻譯文字【例】(簡單)(CH1502)用一個(gè)下拉菜單來選擇語言,并且下面有一個(gè)需要翻譯文字的標(biāo)簽。操作步驟如下。(1)在頭文件“LangSwitch.h”中定義LangSwitch類,創(chuàng)建用戶界面。#include<QWidget>#include<QComboBox>#include<QLabel>classLangSwitch:publicQWidget{Q_OBJECTpublic:LangSwitch(QWidget*parent=0);~LangSwitch();privateslots:voidchangeLang(intindex); //(a)private:voidcreateScreen(); //(b)voidchangeTr(constQString&langCode);voidrefreshLabel();QComboBox*combo; //在界面中可以看見的下拉菜單QLabel*label; //在界面中可以看見的標(biāo)簽};選擇語言翻譯文字【例】(簡單)(CH1502)用一個(gè)下拉菜單43選擇語言翻譯文字(2)源文件“LangSwitch.cpp”中的具體實(shí)現(xiàn)代碼如下:#include"langswitch.h"#include<QVBoxLayout>#include<QTranslator>#include<QApplication>LangSwitch::LangSwitch(QWidget*parent):QWidget(parent){createScreen();}LangSwitch::~LangSwitch(){}選擇語言翻譯文字(2)源文件“LangSwitch.cpp”44選擇語言翻譯文字createScreen()函數(shù)用于創(chuàng)建基本的界面,其具體實(shí)現(xiàn)代碼如下:voidLangSwitch::createScreen(){combo=newQComboBox;combo->addItem("English","en"); //(a)combo->addItem("Chinese","zh");combo->addItem("Latin","la");label=newQLabel;refreshLabel(); //設(shè)置標(biāo)簽的內(nèi)容QVBoxLayout*layout=newQVBoxLayout;layout->addWidget(combo,1);layout->addWidget(label,5);setLayout(layout);connect(combo,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int))); //(b)}選擇語言翻譯文字createScreen()函數(shù)用于創(chuàng)建基本45選擇語言翻譯文字其中,(a)combo->addItem("English","en")、combo->addItem("Chinese","zh")和combo->addItem("Latin","la"):將三個(gè)語言選項(xiàng)(英文、中文和拉丁文)添加到下拉菜單中,并設(shè)置三個(gè)選項(xiàng)的值分別為“en”、“zh”和“l(fā)a”(這是ISO標(biāo)準(zhǔn)中語言的簡寫形式)。(b)changeLang(int):改變語言。refreshLabel()函數(shù)的具體實(shí)現(xiàn)如下:voidLangSwitch::refreshLabel(){label->setText(tr("TXT_HELLO_WORLD","HelloWorld")); //(a)}其中,(a)label->setText(tr("TXT_HELLO_WORLD","HelloWorld")):tr()函數(shù)前一個(gè)參數(shù)是提取翻譯串時(shí)用到的ID,后一個(gè)則起提供注釋的作用,并且在找不到翻譯串時(shí),注釋串會(huì)被采用。例如,語言設(shè)置為中文時(shí),如果以TXT_HELLO_WORLD為ID的串在對(duì)應(yīng)的“.qm”文件中找不到翻譯后的字符串,則將采用后一個(gè)參數(shù),即顯示為英文。選擇語言翻譯文字其中,voidLangSwitch::re46選擇語言翻譯文字changeLang()函數(shù)改變語言的具體代碼如下:voidLangSwitch::changeLang(intindex){QStringlangCode=combo->itemData(index).toString(); //(a)changeTr(langCode); //讀取相應(yīng)的“.qm”文件refreshLabel(); //刷新標(biāo)簽上的文字}其中,(a)QStringlangCode=combo->itemData(index).toString():從所選的菜單項(xiàng)中取得對(duì)應(yīng)語言的值(“en”、“zh”和“l(fā)a”)。選擇語言翻譯文字changeLang()函數(shù)改變語言的具體代47選擇語言翻譯文字changeTr()函數(shù)讀取對(duì)應(yīng)的“.qm”文件,并調(diào)用installTranslator()方法安裝QTranslator對(duì)象,其具體實(shí)現(xiàn)代碼如下:voidLangSwitch::changeTr(constQString&langCode){staticQTranslator*translator; //(a)if(translator!=NULL){ qApp->removeTranslator(translator); deletetranslator; translator=NULL;}translator=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)副產(chǎn)品購銷示范合同
- 簽訂的門面租賃合同條款解析
- 建筑項(xiàng)目施工合同管理人員聘用合同
- 炒股合作經(jīng)典合同案例
- 車輛采購合同細(xì)則
- 國際物流服務(wù)合同專業(yè)版詳解
- 農(nóng)村土地流轉(zhuǎn)授權(quán)合同書
- 城市房屋拆遷補(bǔ)償安置標(biāo)準(zhǔn)合同樣本
- 鋼材買賣合同(示范文本GF-0155)
- 委托代理合同(普通1)
- 骶髂關(guān)節(jié)損傷郭倩課件
- 內(nèi)科學(xué)疾病概要-支氣管擴(kuò)張課件
- 2025陜西渭南光明電力集團(tuán)限公司招聘39人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 教學(xué)課件-電力系統(tǒng)的MATLAB-SIMULINK仿真與應(yīng)用(王晶)
- GB/T 26189.2-2024工作場所照明第2部分:室外作業(yè)場所的安全保障照明要求
- 2024年南京旅游職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 《電商直播》 課件 項(xiàng)目一 走入電商直播
- 《中國宮腔鏡診斷與手術(shù)臨床實(shí)踐指南(2023版)》解讀課件
- 中藥學(xué)電子版教材
- GB/T 9535-1998地面用晶體硅光伏組件設(shè)計(jì)鑒定和定型
- 中藥知識(shí)文庫:天麻形態(tài)學(xué)
評(píng)論
0/150
提交評(píng)論