一、国际化
国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程。 Qt支持现在使用的大多数语言,特别是:
- 所有东亚语言(汉语、日语和朝鲜语);
- 所有西方语言(使用拉丁字母);
- 阿拉伯语;
- 西里尔语言(俄语和乌克兰语等);
- 希腊语;
- 希伯来语;
- 泰语和老挝语;
- 所有在Unicode5. 1中不需要特殊处理的脚本。
在Qt中,所有的输入部件和文本绘制方式对Qt所支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细地绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。相关知识可以在帮助中査看Internationalization with Qt关键字。
Qt对把应用程序翻译为本地语言提供了很好的支持,可以使用Qt Linguist工具很容易地完成应用程序的翻译工作,下面进行介绍。
1.1 使用Qt Linguist翻译应用程序
这一小节中先通过一个简单的例子介绍Qt中翻译应用程序的整个过程,然后再介绍其中需要注意的方面,对应这部分内容可以查看Qt Linguist Manual关键字。在 Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后对这个应用程序的翻译主要包含3步:
- ①运行lupdate工具从C++源代码中提取要翻译的文本,这时会生成一个.ts文 件,这个文件是XML格式的。
- ②在Qt Linguist中打开.ts文件,并完成翻译工作。
- ③运行lrelease工具从.ts文件中获得.qm文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而在程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。
下面通过一个简单的例子来介绍整个翻译过程,该例子实现了将一个英文版本的应用程序翻译为简体中文版本。
第一步,编写源码。新建Qt Gui应用,项目名称为myI18N,类名为MamWindow, 基类保持QMainWindow不变。建立完项目后,单击mainwindow.ui文件进入设计模式,先添加一个菜单,再为其添加一个“&New”子菜单并设置快捷键为Ctrl + N,然后往界面上拖入一个Push Button。再使用代码添加几个标签,打开mainwindow. cpp 文件,添加头文件 #include
QLabel *label = new QLabel(this);
label->setText(tr("hello Qt!"));
label->move(100,50);
QLabel *label2 = new QLabel(this);
label2->setText(tr("password", "mainwindow"));
label2->move(100,80);
QLabel *label3 = new QLabel(this);
int id = 123;
QString name = "linux";
label3->setText(tr("ID is %1,Name is %2").arg(id).arg(name));
label3->resize(150, 12);
label3->move(100, 120);
这里向界面上添加了3个标签,因为这3个标签中的内容都是用户可见的,所以需要调用tr()函数。
第二步,更改项目文件。要在项目文件中指定生成的.ts文件,每一种翻译语言对应一个.ts文件。打开myI18N.pro文件,在最后面添加如下一行代码:
TRANSLATIONS = myI18N_zh_CN.ts
这表明后面生成的.ts文件的文件名为“myI18N_zh_CN. ts”,对于.ts的名称可以随意编写,不过一般是以区域代码来结尾,这样可以更好地区分,例如这里使用了“zh_CN”来表示简体中文。最后按下Ctrl + S保存该文件。
第三步,使用lupdate生成.ts文件。要进行翻译工作时,先要使用lupdate工具来提取源代码中的翻译文本,生成.ts文件。在项目文件列表的myI18N.pro文件上右击,在弹出的菜单中选择“在此弹出命令行提示”。这时打开的命令行控制台中已经自动切换到了项目目录下,这时输人下面一行代码,并按下回车键:
lupdate myI18N.pro
注意,这里要确保已经将Qt安装目录的bin目录的路径添加到了系统PATH环境变量中(笔者这里是D:\software\Technology\Qt\Qt5.11.2\Tools\mingw530_32\bin)。如果还没有设置PATH环境变量,可以按照2. 2. 1小节的方法设置,然后重启QtCreator,再进行该步骤。最后的结果表明更新了“myI18N_zh_CN. ts”文件,发现了8个源文本,其中有8条新的翻译和0条已经存在的翻译,如下图所示。这就是说可以对程序代码进行更改,然后多次运行lupdate,而只需要翻译新添加的内容。可以在项目目录中使用写字板打开这个.ts文件,可以看到它是XML格式的,其中记录了字符串的位置和是否已经被翻译等信息。
第四步,使用Qt Linguist完成翻译。这一步一般是翻译人员来做的,就是在Qt Linguist中打开 .ts文件,然后对字符串逐个进行翻译。在系统的开始菜单中启动liguist(也可以直接在命令行输入linguist或者在Qt安装目录的tools目录下找到并启动它),然后单击界面左上角的open图标,在弹出的文件对话框中进入项目目录,打开myI18N_zh_CN文件,这时整个界面如下图所示。Qt Linguist窗口的具体介绍请去原书看,这里由于篇幅限制不再介绍。
下面来翻译程序。在翻译区域可以看到现在已经是要翻译成中文Chinese translation,这是因为.ts文件名中包含了中文的区域代码。如果这里没有正确显示要翻译成的语言,那么可以使用Edit→Translation File Settings菜单项来更改。
下面首先对MainWindow进行翻译,这里翻译为“应用程序主窗口 ”,然后按下即回车键完成翻译并开始翻译第二个字符串。按照这种方法完成所有字符串的翻译工作, 如下图所示。翻译完成后按下Ctrl + S保存更改,然后退出Qt Linguist。这里对Qt Linguist只是进行了简单介绍,详细可以查看Qt Linguist Manual: Translators关键字。
第五步,使用lrelease工具生成.qm文件。可以使用 工具→外部→Qt语言家→lrelease(发布翻译) 生成.qm文件,或者在工程文件对应命令行输人如下一行代码,并按下回车键:
lrelease myI18N. pro
输出信息如下图所示,这表明已经生成了.qm文件。另外在Qt Linguist中也可以使用File→Reelase和File→Release As这两个菜单项来生成当前已打开的.ts文件对应的.qm文件。这三种方式都能生成.qm文件。
第六步,使用.qm文件。下面在项目中添加代码使用.qm文件来更改界面的语 言。进人main.cpp文件,添加头文件#include
QTranslator translator;
translator.load("../myI18N/myI18N_zh_CN.qm");
a.installTranslator(&translator);
这里先加载了.qm文件(使用了相对路径),然后为QApplication对象安装了翻译。这里还要说明一点,有时可能因为部件的大小问题使得翻译后的文本无法完全显示,较好地解决方法就是使用布局管理器。
1.2 程序翻译中的相关问题
由于篇幅原因,这里不再介绍
二、帮助系统
一个完善的应用程序应该提供尽可能丰富的帮助信息。在Qt中可以使用工具提 示、状态提示以及“What's This”等简单的帮助提示,也可以使用Qt Assistant来提供强大的在线帮助。
2.1 简单的帮助提示
由于篇幅原因,这里不再进行说明。
2.2 简单的帮助提示
由于篇幅原因,这里不再进行说明。
三、创建Qt插件
由于篇幅原因,这里不再进行说明。