文档详情

9 国际化、帮助系统和插件.ppt

发布:2017-02-01约1.64万字共49页下载文档
文本预览下载声明
《Qt Creator快速入门》第2版 第9章 国际化、帮助系统和Qt插件 主 要 内 容 9.1 国际化(第1课时) 9.2 帮助系统(第2课时) 9.3 创建Qt插件(第3课时) 9.4 小结(第3课时) 9.1 国际化 国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程。Qt支持现在使用的大多数语言,特别是: 所有东亚语言(汉语、日语和朝鲜语) 所有西方语言(使用拉丁字母) 阿拉伯语 西里尔语言(俄语和乌克兰语等) 希腊语 希伯来语 泰语和老挝语 所有在Unicode 5.1中不需要特殊处理的脚本 在Qt中,所有的输入部件和文本绘制方式对Qt所支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细的绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。 使用Qt Linguist翻译应用程序 在Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后,对这个应用程序的翻译主要包含三步: 1.运行lupdate工具从C++源代码中提取要翻译的文本,这时会生成一个.ts文件,这个文件是XML格式的; 2.在Qt Linguist中打开.ts文件,并完成翻译工作; 3.运行lrelease工具从.ts文件中获得.qm文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而在程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。 第一步:编写源码 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 = yafei; label3-setText(tr(ID is %1,Name is %2).arg(id).arg(name)); label3-resize(150,12); label3-move(100,120); 这里向界面上添加了三个标签,因为这三个标签中的内容都是用户可见的,所以需要调用tr()函数。 tr( )函数 tr()函数一共有三个参数,它的原型如下: QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static] 第一个参数sourceText就是要显示的字符串,tr()函数会返回sourceText的译文; 第二个参数disambiguation是消除歧义字符串,比如这里的password,如果一个程序中需要输入多个不同的密码,那么在没有上下文的情况下,就很难确定这个password到底指哪个密码。这个参数一般使用类名或者部件名,比如这里使用了mainwindow,就说明这个password是在mainwindow上的; 第三个参数n表明是否使用了复数,因为英文单词中复数一般要在单词末尾加“s”,比如“1 message”,复数时为“2 messages”。遇到这种情况,就可以使用这个参数,它可以根据数值来判断是否需要添加“s”,例如: int n = messages.count(); showMessage(tr(%n message(s) saved, , n)); 第二步,更改项目文件 要在项目文件中指定生成的.ts文件,每一种翻译语言对应一个.ts文件。打开myI18N.pro文件,在最后面添加如下一行代码: TRANSLATIONS = myI18N_zh_CN.ts 这表明后面生成的.ts文件的文件名为“myI18N_zh_CN.ts”,对于.ts的名称可以随意编写,不过一般是以区域代码来结尾,这样可以更好的区分,例如这里使用了“zh_CN”来表示简体中文。最后按下Ctrl+S保存该文件。 第三步,使用lupdate生成.ts文件 先要使用lupdate工具来提取源代码中的翻译文本,生成.t
显示全部
相似文档