所谓国际化指的是使用Qt Linguist(Qt语言家)翻译程序的基本流程和自动判断程序运行的语言环境。
国际化的英语表述为Inernationalization,通常简写为I18N,一个应用程序的国际化就是使该应用程序可以在其他国家的用户使用的过程。
在Qt中所有的输入部件和文本绘制方式对Qt所支持的所有语言提供内置的支持。
一、使用Linguist翻译程序的基本流程
在Qt中编写代码时要对需要显示的字符串调用tr()函数,
补充:
tr()函数一个有三个参数,tr()函数的原型如下:
QString QObject::tr(const char* sourceText,//要显示的字符串
const char* disambigusti0n=0,//消除歧义的字符串,如需要输入多个password,如果没有上下文的情况下很难区分,所以就是用这个参数,用于区分该出显示的这个password属于哪个界面或者部件
int n=-1)[static]//n表明书否使用复数,使用这个参数数值判定是否需要加's'
Tel:
int n=Message.count();
showMessage(tr("%n message(s) saved"," ",n));
完成代码编写后,对这个应用程序的翻译主要包含三步:
- 运行lupdate工具从C++源代码中提取要翻译的文本,这时生成一个.ts文件,这个文件是XML格式的;
在翻译之前要在项目中指定生成的.ts文件,每一种翻译语言对应一个.ts文件。打开项目的.pro文件,在最后添加一行代码: TRANSLATIONS=myI18N_zh_CN.ts //myI18N_zh_CN是自定义的.ts文件名称,一般以区域代码结尾,这样更好区分,如zh_CN表示简体中文。 - 在Qt Linguist中打开.ts文件,并完成翻译工作;
Qt Linguist(Qt翻译家)界面:
在菜单栏中列出了Qt Linguist的所有功能选项, 而工具栏中列出了常用的一些功能, 其中后面9个图标的功能为: - 字符串列表中移动到前一个条目
- 在字符串列表中移动到下一个条目
- 在字符串列表中移动到前一个没有完成翻译的条目
- 在字符串列表中移动到下一个没有完成翻译的条目
- 标记当前条目为完成翻译状态, 然后移动到下一个没有完成翻译的条目
- 打开或关闭加速键(accelerator) 验证(validation) 。 打开加速键验证可以验证加速键是否被翻译, 例如
字符串中包含“&”符号, 但是翻译中没有包含“&”符号, 则验证失败。 - 打开或关闭短语结束标点符号验证。 打开短语标点符号验证可以验证翻译中是否使用了和字符串中相同的标点来结尾。
- 打开或关闭短语参考(phrase book) 验证。 打开短语参考验证可以验证翻译是否和短语参考中的翻译相同。在翻译相似的程序时, 若希望将常用的翻译记录下来, 以便以后使用, 就可以使用短语参考。 可以通过Phrases”→“New Phrase Book”菜单来创建一个新的短语参考, 然后再翻译字符串时使用Ctrl+T将这个字符串
及其翻译放入短语参考中。 - 打开或关闭占位符(place marker) 验证。 打开占位符验证可以验证翻译中是否使用了和字符串中相同的占位符, 例如%1, %2等。
打开.ts文件
Note:?表示未翻译
翻译完成后,保存.ts文件,回到Qt Cteater,选择菜单栏中的工具》外部》Qt预言家,点击更新 翻译
- 运行lrelease工具从.ts文件中获取.qm文件------选择菜单栏中的工具》外部》Qt预言家,点击发布翻译,生成.qm文件。.qm是一个二进制文件。这里的.ts文件是供翻译人员使用的,而在程序运行时候只需要使用.qm文件,这两个文件都是与平台无关的。
运行程序,程序就会根据语言环境进行翻译了。这样就完成了应用程序的国际化。
Note:可以在控制面板中修改本地的语言环境,进行测试验证。