《Qt多国语言国际化》PPT课件_第1页
《Qt多国语言国际化》PPT课件_第2页
《Qt多国语言国际化》PPT课件_第3页
《Qt多国语言国际化》PPT课件_第4页
《Qt多国语言国际化》PPT课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第15章 Qt多国语言国际化15.1 概念15.2 实例15.1 概念15.1.1 QString、QTranslator等类和tr()函数的作用在支持国际化的过程中,一般在Qt中利用QString、QTranslator等类和tr()函数能够很方便的完成加入国际化的支持,具体工作如下:(1) 使用QString对象来表示所有用户可见的文本。(2) 使用tr()函数来取得所有需要翻译的文本。(3) 使用QString:arg()来组织动态文本。比如下面的字符串用来表示任务的完成情况:QString m = tr(“Mission status: “ )+ x + tr(“of “) + y +

2、tr(”are completed”);(4) 利用QTranslator:load()和QCoreApplication:installTranslator()来读取对应的翻译之后的资源文件。15.1.2 *.qm文件的生成对于翻译工作者,主要是利用Qt提供的工具lupdate、linguist和lrelease来协助翻译工作并生成最后需要的.qm文件,它包括以下内容:(1) 利用lupdate工具从源代码中扫描并提取需要翻译的字符串,生成.ts文件。类似编译时用到的qmake,运行lupdate时我们也需要指定一个.pro的文件,这个.pro文件可以单独创建,也可以利用编译时用到的.pro

3、文件。(2) 利用linguist工具来协助完成翻译工作,即打开前面用lupdate生成的.ts文件,对其中的字符串逐条进行翻译并保存。(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) 编译。假如没有编译而进行下面的步骤,生成的ts文件只是一个只有标题栏的框架。(4) 编译完成后,假如是windows下就cmd ,假如是linux就开终端。单击“开始”-“所有程序”-“Qt SDK by Nokia V2010.03(Open Source)”-“Qt Commond Prompt”命令打开“Qt Commond Prompt”窗口,cd 进入TestH工程目录,执行命令: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”命令,运行Qt自带工具Qt Linguist。 单击菜单“文件”“打开”命令,选择“TestHello.ts”文件,单击“打开”按钮,然后根据需要设置源语言和目标语言,此处为默认状态:源语言为任意国家语言,目标语言为china国家的chinese。(6) 在第二栏选择要翻译的字符串,在下面两行中输入对应的翻译文字,然后单击

6、上面的 按钮。5.2.1 实例1 (7) 单击“File”“release”,或者在命令行输入“lrelease 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此实例是用一个下拉菜单来选择语言,然后下面有一个需要翻译文字的标签。(1) 在头文件LangSwitch.h中定义了类LangSwitch,创建用户界面。#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中的具体实现:#include langswitch.h#include

9、#include #include LangSwitch:LangSwitch(QWidget *parent) : QWidget(parent) createScreen();LangSwitch:LangSwitch()15.2.2 实例2createScreen()函数用来创建基本的界面,其具体实现代码如下: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()函数具体实现如下:void LangSwitch:refreshLabel() label-setText(tr

11、(TXT_HELLO_WORLD, Hello World);changeLang()函数改变语言的具体代码如下:void LangSwitch:changeLang(int index) QString langCode = combo-itemData(index).toString(); changeTr(langCode); refreshLabel();15.2.2 实例2函数changeTr()读取对应的.qm文件,并调用installTranslator()方法来安装QTranslator对象,其具体实现代码如下: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文件(这工作一般有专门的工作组去负责),具体操作如下: 修改文件,即在后面加上TRANSLATIONS的定义。修改完的文件的具体内容如下:TARGET = LangSwit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论