版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第15章 Qt多國語言國際化15.1 概念15.2 實例15.1 概念15.1.1 QString、QTranslator等類和tr()函數(shù)的作用在支持國際化的過程中,一般在Qt中利用QString、QTranslator等類和tr()函數(shù)能夠很方便的完成加入國際化的支持,具體工作如下:(1) 使用QString對象來表示所有用戶可見的文本。(2) 使用tr()函數(shù)來取得所有需要翻譯的文本。(3) 使用QString:arg()來組織動態(tài)文本。比如下面的字符串用來表示任務(wù)的完成情況:QString m = tr(“Mission status: “ )+ x + tr(“of “) + y +
2、tr(”are completed”);(4) 利用QTranslator:load()和QCoreApplication:installTranslator()來讀取對應(yīng)的翻譯之后的資源文件。15.1.2 *.qm文件的生成對于翻譯工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease來協(xié)助翻譯工作并生成最后需要的.qm文件,它包括以下內(nèi)容:(1) 利用lupdate工具從源代碼中掃描并提取需要翻譯的字符串,生成.ts文件。類似編譯時用到的qmake,運(yùn)行l(wèi)update時我們也需要指定一個.pro的文件,這個.pro文件可以單獨(dú)創(chuàng)建,也可以利用編譯時用到的.pro
3、文件。(2) 利用linguist工具來協(xié)助完成翻譯工作,即打開前面用lupdate生成的.ts文件,對其中的字符串逐條進(jìn)行翻譯并保存。(3) 利用lrelease工具處理翻譯好的.ts文件,生成格式更為緊湊的.qm文件。這便是翻譯工作者最終需要提供的資源文件,它所占的空間比.ts文件小,但基本不具有可讀性,只有QTranslator能正確的識別它。15.2 實例5.2.1 實例1 (1) 新建一個GUI工程TestH,然后在UI文件上添加兩個按鈕,并分別把文本修改為hello、china,如圖15.1所示。5.2.1 實例1 (2) 修改TestH文件,添加:
4、TRANSLATIONS =TestHello.ts(3) 編譯。假如沒有編譯而進(jìn)行下面的步驟,生成的ts文件只是一個只有標(biāo)題欄的框架。(4) 編譯完成后,假如是windows下就cmd ,假如是linux就開終端。單擊“開始”-“所有程序”-“Qt SDK by Nokia V2010.03(Open Source)”-“Qt Commond Prompt”命令打開“Qt Commond Prompt”窗口,cd 進(jìn)入TestH工程目錄,執(zhí)行命令:lupdate TestH5.2.1 實例1 在工程下生成一個ts文件,假如沒有編譯的話,會提示Found 1 s
5、ource text。假如編譯后,會提示Found 3 source text,如圖15.2所示。5.2.1 實例1 (5) 單擊“開始”-“所有程序”-“Qt SDK by Nokia V2010.03(Open Source)”-“Tools”-“Qt Linguist”命令,運(yùn)行Qt自帶工具Qt Linguist。 單擊菜單“文件”“打開”命令,選擇“TestHello.ts”文件,單擊“打開”按鈕,然后根據(jù)需要設(shè)置源語言和目標(biāo)語言,此處為默認(rèn)狀態(tài):源語言為任意國家語言,目標(biāo)語言為china國家的chinese。(6) 在第二欄選擇要翻譯的字符串,在下面兩行中輸入對應(yīng)的翻譯文字,然后單擊
6、上面的 按鈕。5.2.1 實例1 (7) 單擊“File”“release”,或者在命令行輸入“l(fā)release TestH”,生成TestHello.qm文件,如圖15.3所示。5.2.1 實例1 (8) 修改源代碼。添加前,具體代碼如下:int main(int argc, char *argv) QApplication a(argc, argv); MainWindow w;w.show();return a.exec();5.2.1 實例1 添加后,具體代碼如下:#includeint main(int argc, char *argv) QApplication a
7、(argc, argv);QTranslator *translator = new QTranslator;translator-load(./TestHello.qm);a.installTranslator(translator);MainWindow w;w.show();return a.exec();15.2.2 實例2此實例是用一個下拉菜單來選擇語言,然后下面有一個需要翻譯文字的標(biāo)簽。(1) 在頭文件LangSwitch.h中定義了類LangSwitch,創(chuàng)建用戶界面。#include #include #include class LangSwitch : public QWi
8、dget Q_OBJECTpublic: LangSwitch(QWidget *parent = 0); LangSwitch();private slots: void changeLang(int index);private: void createScreen(); void changeTr(const QString& langCode); void refreshLabel(); QComboBox* combo; QLabel* label;15.2.2 實例2(2) 源文件LangSwitch.cpp中的具體實現(xiàn):#include langswitch.h#include
9、#include #include LangSwitch:LangSwitch(QWidget *parent) : QWidget(parent) createScreen();LangSwitch:LangSwitch()15.2.2 實例2createScreen()函數(shù)用來創(chuàng)建基本的界面,其具體實現(xiàn)代碼如下:void LangSwitch:createScreen() combo = new QComboBox; combo-addItem(English, en); combo-addItem(Chinese, zh); combo-addItem(Latin, la); label
10、 = new QLabel; refreshLabel(); QVBoxLayout* layout = new QVBoxLayout; layout-addWidget(combo, 1); layout-addWidget(label, 5); setLayout(layout); connect(combo, SIGNAL(currentIndexChanged(int), this, SLOT(changeLang(int);15.2.2 實例2refreshLabel()函數(shù)具體實現(xiàn)如下:void LangSwitch:refreshLabel() label-setText(tr
11、(TXT_HELLO_WORLD, Hello World);changeLang()函數(shù)改變語言的具體代碼如下:void LangSwitch:changeLang(int index) QString langCode = combo-itemData(index).toString(); changeTr(langCode); refreshLabel();15.2.2 實例2函數(shù)changeTr()讀取對應(yīng)的.qm文件,并調(diào)用installTranslator()方法來安裝QTranslator對象,其具體實現(xiàn)代碼如下:void LangSwitch:changeTr(const QS
12、tring& langCode) static QTranslator* translator; if (translator != NULL) qApp-removeTranslator(translator); delete translator; translator = NULL; translator = new QTranslator; QString qmFilename = lang_ + langCode; if (translator-load(QString(./)+qmFilename) qApp-installTranslator(translator); 15.2.2 實例2(3) 提取需要翻譯的字符串并翻譯然后生成.qm文件(這工作一般有專門的工作組去負(fù)責(zé)),具體操作如下: 修改文件,即在后面加上TRANSLATIONS的定義。修改完的文件的具體內(nèi)容如下:TARGET = LangSwit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼琴曲 五線譜-青春考卷-1
- 高二政治月考卷
- 高二生物月考卷
- 《2024年 內(nèi)蒙古大學(xué)MTI英語口譯方向畢業(yè)論文選題研究(2013-2021)》范文
- 《大學(xué)美育》 課件 模塊五 第二十章 縱橫拓展的建筑藝術(shù)之美;第二十一章 情景交融的園林藝術(shù)之美
- 部編版道德與法治二年級上冊第13課《我愛家鄉(xiāng)山和水》精美課件
- 2024屆山東省淄博市周村縣初中生物畢業(yè)考試模擬沖刺卷含解析
- 江西省撫州市臨川第一中學(xué)2022年高三下學(xué)期第六次檢測物理試卷含解析
- 酒業(yè)公司轉(zhuǎn)讓協(xié)議書模板
- 采購政策協(xié)議書模板范文
- 流動化學(xué)在藥物合成中應(yīng)用ApplicationsofFlowChemistry課件
- 車輛使用授權(quán)委托書參考車輛授權(quán)使用委托書
- 2022年高考語文真題分類匯編 專題14 文學(xué)類閱讀之小說
- 導(dǎo)游實務(wù)(第二版)篇模塊三項目二景點(diǎn)講解
- 如何建立和規(guī)范安全管理內(nèi)業(yè)資料資料
- DBJ∕T15-62-2021 陶粒混凝土技術(shù)規(guī)程
- 游戲游藝設(shè)備登記表
- DB11T 1455-2017 電動汽車充電基礎(chǔ)設(shè)施規(guī)劃設(shè)計標(biāo)準(zhǔn)
- 中國傳統(tǒng)四大名著水滸傳學(xué)習(xí)教育動態(tài)PPT模板
- 四年級語文上冊第一單元 口語交際:我們與環(huán)境課件(12頁)
- (通風(fēng)工)三級安全教育試卷及答案
評論
0/150
提交評論