《《Qt多国语言国际化》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Qt多国语言国际化》PPT课件.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、15.1概念15.2实例15.1.1 QString、QTranslator等类和等类和tr()函数的作用函数的作用在支持国际化的过程中,一般在Qt中利用QString、QTranslator等类和tr()函数能够很方便的完成加入国际化的支持,具体工作如下:(1)使用QString对象来表示所有用户可见的文本。(2)使用tr()函数来取得所有需要翻译的文本。(3)使用QString:arg()来组织动态文本。比如下面的字符串用来表示任务的完成情况:QStringm=tr(“Missionstatus:“)+x+tr(“of“)+y+tr(”arecompleted”);(4)利用QTransl
2、ator:load()和QCoreApplication:installTranslator()来读取对应的翻译之后的资源文件。对于翻译工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease来协助翻译工作并生成最后需要的.qm文件,它包括以下内容:(1)利用lupdate工具从源代码中扫描并提取需要翻译的字符串,生成.ts文件。类似编译时用到的qmake,运行lupdate时我们也需要指定一个.pro的文件,这个.pro文件可以单独创建,也可以利用编译时用到的.pro文件。(2)利用linguist工具来协助完成翻译工作,即打开前面用lupdate生成的.ts文件,
3、对其中的字符串逐条进行翻译并保存。(3)利用lrelease工具处理翻译好的.ts文件,生成格式更为紧凑的.qm文件。这便是翻译工作者最终需要提供的资源文件,它所占的空间比.ts文件小,但基本不具有可读性,只有QTranslator能正确的识别它。5.2.1 实例实例1(1)新建一个GUI工程TestHello.pro,然后在UI文件上添加两个按钮,并分别把文本修改为hello、china,如图15.1所示。(2)修改TestHello.pro文件,添加:TRANSLATIONS=TestHello.ts(3)编译。假如没有编译而进行下面的步骤,生成的ts文件只是一个只有标题栏的框架。(4)编
4、译完成后,假如是windows下就cmd,假如是linux就开终端。单击“开始”-“所有程序”-“QtSDKbyNokiaV2010.03(OpenSource)”-“QtCommondPrompt”命令打开“QtCommondPrompt”窗口,cd进入TestHello.pro工程目录,执行命令:lupdateTestHello.pro在工程下生成一个ts文件,假如没有编译的话,会提示Found1sourcetext。假如编译后,会提示Found3sourcetext,如图15.2所示。(5)单击“开始”-“所有程序”-“QtSDKbyNokiaV2010.03(OpenSource)”-
5、“Tools”-“QtLinguist”命令,运行Qt自带工具QtLinguist。单击菜单“文件”“打开”命令,选择“TestHello.ts”文件,单击“打开”按钮,然后根据需要设置源语言和目标语言,此处为默认状态:源语言为任意国家语言,目标语言为china国家的chinese。(6)在第二栏选择要翻译的字符串,在下面两行中输入对应的翻译文字,然后单击上面的按钮。(7)单击“File”“release”,或者在命令行输入“lreleaseTestHello.pro”,生成TestHello.qm文件,如图15.3所示。(8)修改源代码。添加前,具体代码如下:intmain(intargc,
6、char*argv)QApplicationa(argc,argv);MainWindoww;w.show();returna.exec();添加后,具体代码如下:#includeintmain(intargc,char*argv)QApplicationa(argc,argv);QTranslator*translator=new QTranslator;translator-load(./TestHello.qm);a.installTranslator(translator);MainWindoww;w.show();returna.exec();此实例是用一个下拉菜单来选择语言,然后下
7、面有一个需要翻译文字的标签。(1)在头文件LangSwitch.h中定义了类LangSwitch,创建用户界面。#include#include#includeclassLangSwitch:publicQWidgetQ_OBJECTpublic:LangSwitch(QWidget*parent=0);LangSwitch();privateslots:voidchangeLang(intindex);private:voidcreateScreen();voidchangeTr(constQString&langCode);voidrefreshLabel();QComboBox*comb
8、o;QLabel*label;(2)源文件LangSwitch.cpp中的具体实现:#includelangswitch.h#include#include#includeLangSwitch:LangSwitch(QWidget*parent):QWidget(parent)createScreen();LangSwitch:LangSwitch()createScreen()函数用来创建基本的界面,其具体实现代码如下:voidLangSwitch:createScreen()combo=newQComboBox;combo-addItem(English,en);combo-addItem
9、(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);refreshLabel()函数具体实现如下:voidLangSwitch:refreshLabel()labe
10、l-setText(tr(TXT_HELLO_WORLD,HelloWorld);changeLang()函数改变语言的具体代码如下:voidLangSwitch:changeLang(intindex)QStringlangCode=combo-itemData(index).toString();changeTr(langCode);refreshLabel();函数changeTr()读取对应的.qm文件,并调用installTranslator()方法来安装QTranslator对象,其具体实现代码如下:voidLangSwitch:changeTr(constQString&lang
11、Code)staticQTranslator*translator;if(translator!=NULL)qApp-removeTranslator(translator);deletetranslator;translator=NULL;translator=newQTranslator;QStringqmFilename=lang_+langCode;if(translator-load(QString(./)+qmFilename)qApp-installTranslator(translator);(3)提取需要翻译的字符串并翻译然后生成.qm文件(这工作一般有专门的工作组去负责),具体操作如下:修改langswitch.pro文件,即在后面加上TRANSLATIONS的定义。修改完的langswitch.pro文件的具体内容如下:TARGET=LangSwitchTEMPLATE=appSOURCES+=main.cpplangswitch.cppHEADERS+=langswitch.hTRANSLATIONS=lang_en.tslang_zh.tslang_la.ts此时运行结果如图15.4所示。利用lupdate工具来提取需要翻译的字符串,运行命令及结果如图15.5所示。