写代码
Qt提供了一个非常方便的多语言国际化方案,开发者使用它可以用非常简单的方式让程序支持多种语言。
这里记录一个qt多语言的最简单的示例,开发工具使用的使qtcreator。
要实现多语言得支持,首先得在代码中完成这几个步骤:
#include<QTranslator>
//实例化一个翻译模块的对象,并载入翻译文件
QTranslator translator;
translator.load("translator.qm");
//使用QApplictioin的对象,为程序安装翻译模块
app.installTranslator(&translator);
//最后使用一个label显示文本,来展示翻译的效果
QLabel *label = new QLabel();
label->setText(QObject::tr("hello word"));
label->show();
这里要注意,需要翻译的文本,一定要使用Qobject::tr()函数包裹,这样才能被正确的适配到。
生成翻译文件
要实现多语言,光是这样肯定是不够的,接下来的步骤才是重点。
在项目的pro文件夹中加入
这条代码的之作用是为了指定生成翻译文件时的路径。
如果使用较高版本的Qt Creator,可以直接在界面上使用快捷方式生成翻译文件。

当然,如果使用的是低版本的Qt Creator那么只需要在power shell中使用命令也可以实现相同的功能。
正常情况下将AppName替换为项目名称就可以生成了。
- 如果提示命令不存在,那么可能是没有设置环境变量,只需要在命令前面加上Linguist的exe路径即可。或者设置一下QtCreator的环境变量也可以。
- 如果提示pro文件不存在,那么在pro文件名称前跟上文件的绝对路径,或者移动到项目路径操作。
按照上述方法生成翻译文件之后,会得到translator.ts,其实这就是一个xml文件,里面统计了代码里所有需要翻译的文本。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="13"/>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="main.cpp" line="15"/>
<source>hello word</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
比如我这个,因为新建工程的时候新建了mainwindow,所以这里统计的时候把ui文件中的文本也统计到了。
接下来使用Linguist(在安装QtCreator的时候一起安装的)打开这个文件。

打开之后,会弹出这界面让选择翻译目标,从什么语言翻译到什么语言。
选择对应的语言之后就可以开始做翻译工作拉。

翻译完成之后,点击发布,会得到translator.qm文件,将这个文件拷贝到构建目录,就可以运行程序了。
运行结果

~嗯,这样就完成了一个最简单的示例。
完整代码如下:
#include <qtranslator.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
if(translator.load("./translator.qm"))
{
a.installTranslator(&translator);
QLabel *label = new QLabel();
label->setText(QObject::tr("hello word"));
label->show();
}
return a.exec();
}
如果未弹出窗口程序就结束了,那么说明翻译文件载入失败了,需要检查一下翻译文件的名称和所在目录是否正确。
文章评论