Qt5多國語言國際化_第1頁
Qt5多國語言國際化_第2頁
Qt5多國語言國際化_第3頁
Qt5多國語言國際化_第4頁
Qt5多國語言國際化_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第14章Qt5多國語言國際化

14.1基本概念14.2【實例】2021/6/27114.1基本概念14.1.1國際化支持的實現(1)使用QString對象表示所有用戶可見的文本。由于QString內部使用Unicode編碼實現,所以它可以用于表示所有需要向用戶呈現的文本。當然,對于僅程序員可見的文本并不需要都變為QString對象,可利用Qt提供的QCString或原始的“char*”。(2)使用tr()函數獲取所有需要翻譯的文本。在Qt的翻譯機制下,QObject::tr()函數可以幫程序員取得翻譯之后的文本。對于從QObject繼承而來的類,QObject::tr()函數最終由QMetaObject::tr()實現。在某些時候,如果無法使用QObject::tr()函數,則還可以直接調用QCoreApplication::translate()取得翻譯之后的字符串。2021/6/27214.1.1國際化支持的實現(3)使用QString::arg()組織動態文本。有些時候,一段文本需要由一些靜態文本和動態變量組合起來,如常見的情況“printf("Thevalueofiis:%d",i)”。對于這種動態文本的翻譯,由于語言習慣的問題,如果簡單地采用這種連接字符串的方法,則可能會帶來一些問題,如下面的字符串用于表示任務的完成情況:QStringm=tr("Missionstatus:")+x+tr("of")+y+tr("arecompleted");(4)利用QTranslator::load()和QCoreApplication::installTranslator()讀取對應的翻譯之后的資源文件。翻譯工作者將提供包含有翻譯之后的字符串的資源文件“*.qm”,程序員還需要做的是定義QTranslator對象,并使用load()函數讀取相應的“.qm”文件,利用QCoreApplication::installTranslator()函數安裝QTranslator對象。2021/6/27314.1.2翻譯工作:“*.qm”文件的生成(1)利用lupdate工具從源代碼中掃描并提取需要翻譯的字符串,生成“.ts”文件。類似編譯時用到的qmake,運行lupdate時也需要指定一個“.pro”的文件,這個“.pro”文件可以單獨創建,也可以利用編譯時用到的“.pro”文件,只需定義好變量TRANSLATIONS即可,具體用法可以參見本書后面的小例子。(2)利用linguist工具來協助完成翻譯工作,即打開前面用lupdate生成的“.ts”文件,對其中的字符串逐條進行翻譯并保存。由于“.ts”文件采用了XML格式,所以也可以使用其他編輯器來打開“.ts”文件并翻譯。(3)利用lrelease工具處理翻譯好的“.ts”文件,生成格式更為緊湊的“.qm”文件。這便是翻譯工作者最終需要提供的資源文件,它所占的空間比“.ts”文件小,但基本不具有可讀性,只有QTranslator能夠正確地識別它。2021/6/27414.2【實例】14.2.1簡單測試【例】(簡單)(CH1401)多國語言國際化。操作步驟如下。(1)新建一個GUI工程“TestH”,在UI界面上添加兩個按鈕,并分別將文本修改為hello、china,如圖14.1所示。2021/6/27514.2.1簡單測試(2)修改“TestH”文件,添加如下代碼:TRANSLATIONS=TestHello.ts(3)編譯。記住,一定要先編譯,假如沒有編譯就進行下面的步驟,生成的“.ts”文件只是一個僅有標題欄的框架。(4)編譯完成后,選擇“開始”→“所有程序”→“Qt5.8.0”→“5.8”→“MinGW5.3.0(32-bit)”→“Qt5.8forDesktop(MinGW5.3.032bit)”菜單項,打開命令行窗口,進入“TestH”工程目錄,執行命令:lupdateTestH在工程下生成一個“.ts”文件,假如沒有編譯,將提示“Found1sourcetext”。若已經編譯,就將提示“Found3sourcetext(s)”,如圖14.2所示。2021/6/27614.2.1簡單測試(5)選擇“開始”→“所有程序”→“Qt5.8.0”→“5.8”→“MinGW5.3.0(32-bit)”→“Linguist”菜單項,運行Qt自帶工具Linguist(Qt語言家),其主界面如圖14.3。2021/6/27714.2.1簡單測試在主界面上選擇“文件”→“打開”命令,選擇“TestHello.ts”文件,單擊“打開”按鈕,根據需要設置源語言和目標語言,此處為默認狀態:源語言為任意國家語言,目標語言為China的Chinese,如圖14.4所示。2021/6/27814.2.1簡單測試(6)在第二欄中選擇要翻譯的字符串,在下面兩行中輸入對應的翻譯文字,單擊上面的按鈕,如圖14.5所示。2021/6/27914.2.1簡單測試(7)選擇“文件”→“發布”菜單項,或者在命令行中輸入“lreleaseTestH”,生成“TestHello.qm”文件,如圖14.6所示。2021/6/271014.2.1簡單測試(8)修改源代碼,其中,加黑語句為需要添加的部分。具體代碼如下:#include<QTranslator>intmain(intargc,char*argv[]){ QApplicationa(argc,argv);

QTranslator*translator=newQTranslator;

translator->load("D:/Qt/CH14/CH1401/TestHello/TestHello.qm");

a.installTranslator(translator); MainWindoww; w.show(); returna.exec();}2021/6/271114.2.1簡單測試(9)運行程序,效果如圖14.7所示。2021/6/271214.2.2選擇語言翻譯文字【例】(簡單)(CH1402)用一個下拉菜單來選擇語言,并且下面有一個需要翻譯文字的標簽。實現步驟如下。(1)在頭文件“LangSwitch.h”中定義類LangSwitch,創建用戶界面。#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; //界面中可以看見的標簽};2021/6/271314.2.2選擇語言翻譯文字(2)源文件“LangSwitch.cpp”中的具體實現代碼如下:#include"langswitch.h"#include<QVBoxLayout>#include<QTranslator>#include<QApplication>LangSwitch::LangSwitch(QWidget*parent):QWidget(parent){createScreen();}LangSwitch::~LangSwitch(){}2021/6/271414.2.2選擇語言翻譯文字createScreen()函數用于創建基本的界面,其具體實現代碼如下:voidLangSwitch::createScreen(){combo=newQComboBox;combo->addItem("English","en"); //(a)combo->addItem("Chinese","zh");combo->addItem("Latin","la");label=newQLabel;refreshLabel(); //設置標簽的內容QVBoxLayout*layout=newQVBoxLayout;layout->addWidget(combo,1);layout->addWidget(label,5);setLayout(layout);connect(combo,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int))); //(b)}2021/6/271514.2.2選擇語言翻譯文字refreshLabel()函數的具體實現如下:voidLangSwitch::refreshLabel(){label->setText(tr("TXT_HELLO_WORLD","HelloWorld")); //(a)}changeLang()函數改變語言的具體代碼如下:voidLangSwitch::changeLang(intindex){QStringlangCode=combo->itemData(index).toString(); //(a)changeTr(langCode); //讀取相應的“.qm”文件

refreshLabel(); //刷新標簽上的文字}2021/6/271614.2.2選擇語言翻譯文字函數changeTr()讀取對應的“.qm”文件,并調用installTranslator()方法安裝QTranslator對象,其具體實現代碼如下: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/CH14/CH1402/LangSwitch/")+

qmFilename)){ qApp->installTranslator(translator);}}2021/6/271714.2.2選擇語言翻譯文字(3)提取需要翻譯的字符串并翻譯,生成“.qm”文件(這個工作通常由專門的工作組負責),具體操作如下。①修改“”文件,即在后面加上TRANSLATIONS的定義(加黑部分代碼)。修改完的“”文件的具體內容如下:TARGET=LangSwitchTEMPLATE=appSOURCES+=main.cpp\langswitch.cppHEADERS+=langswitch.hTRANSLATIONS=lang_en.ts\

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論