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

提交评论