[Qt Creator 快速入门] 第9章 国际化、帮助系统和Qt插件
一、国际化
国际化的英文表述为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>,然后在构造函数中添加代码 :
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>,然后在“QApplication a(argc, argv);”代码下添加如下代码:
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插件
由于篇幅原因,这里不再进行说明。
[Qt Creator 快速入门] 第9章 国际化、帮助系统和Qt插件的更多相关文章
- [Qt Creator 快速入门] 第1章 Qt Creator简介
Qt Creator 是一个跨平台的.完整的 Qt 集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具.集成的上下文相关的帮助系统.图形化调试器.代码管理和浏览工具等.这一章先对 Qt ...
- [Qt Creator 快速入门] 第2章 Qt程序编译和源码详解
一.编写 Hello World Gui程序 Hello World程序就是让应用程序显示"Hello World"字符串.这是最简单的应用,但却包含了一个应用程序的基本要素,所以 ...
- [Qt Creator 快速入门] 第5章 应用程序主窗口
对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...
- [Qt Creator 快速入门] 第8章 界面外观
一个完善的应用程序不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户.作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制.这一章将学习在Qt中设计应 ...
- [Qt Creator 快速入门] 第3章 窗口部件
从这一章开始正式接触Qt的窗口部件.在第2章曾看到 Qt Creator 提供的默认基类只有 QMainWindow.QWidget 和 QDialog 这3种.QMainWindow 是带有菜单栏和 ...
- [Qt Creator 快速入门] 第4章 布局管理
第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的. 无论是想要界面中部件有一个很整齐的排列,还是想要 ...
- QT Creator 快速入门教程 读书笔记(一)
一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌 ...
- [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator
Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...
- 《QT Creator快速入门》
ui中的类,这样使用无法通过调试: Ui::Dialog ui(&w); w.show(); 而需要改成: Ui::Dialog ui; ui.setupUi(&w); w.show( ...
随机推荐
- [luoguP2827] 蚯蚓(堆?队列!)
传送门 35分做法 用堆来取最大值,暴力更新其余数的值. 65~85分做法 还是用堆来取最大值,其余的数增加可以变成新切开的两个数减少,最后统一加上一个数. #include <queue> ...
- bzoj3262 陌上花开 cdq+树状数组
[bzoj3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...
- CSS font-family 属性
CSS font-family 属性 实例 为段落设置字体: p { font-family:"Times New Roman",Georgia,Serif; } 亲自试一试 浏览 ...
- CSS实现自适应不同大小屏幕的背景大图的两种方法(转自简书)
CSS实现自适应不同大小屏幕的背景大图的两种方法 一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块 ...
- oracle的processes和session最大限制
1.现象:oracle运行了一段时间后出现用户名连接不上,提示process已经达到最大值. 2.解决: --管理员身份登录 sqlplus / as sysdba --修改processes最大值, ...
- Lua:ipairs和pairs的区别
ipairs 和pairs在lua中都是遍历tbale的函数但是两者有区别 1.pairs遍历table中的所有的key-vale 而ipairs会根据key的数值从1开始加1递增遍历对应的table ...
- yarn 和 npm 的区别
npm 与 yarn 命令对比 npm yarn npm install yarn install (N/A) yarn install --flat (N/A) yarn install --har ...
- Paypal支付(一)MPL真正的快捷支付
一.前导 前面讲到了MEC支付,是在Web端集成好的,在手机端仅仅需通过WebView进行载入就可以,不须要不论什么Paypal第三方架包.以下将的是MPL支付.须要架包. 这样的支付的形式能够參考以 ...
- 2016/1/22 3,将id为005的对象从集合中移除
package shuzu; public class Emp { private String id; private String name; public Emp(String id, Stri ...
- OSS与文件系统的对比
基本概念介绍_开发指南_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31827.html 强一致性 Object 操作在 OSS 上具有 ...