最近在做软件的中英文切换功能,所以找了些资料,研究了一下Qt的国际化,这里分享一下。现将实现方式记录下来,也是方便自己以后查找。
百度云下载:https://pan.baidu.com/s/1szQa6pkwuO0-y01885i-5g 提取码:0re8
CSDN下载:https://download.csdn.net/download/Sakuya__/12401921
目录
效果
实现国际化
一、将所有需要翻译的字符用tr()包起来
首先将自己代码中所有要显示的文本信息,字符串外用tr()括起来,例如这样:
QMessageBox::information(this, tr("Title"), tr("This is a Dialog"), QMessageBox::Yes);
这里建议源代码中的所有要显示的字符串都用英文,然后在国际化时再翻译一个中文版的。因为如果在代码中使用中文字符串是要使用utf-8或GBK编码的,而QT内部采用的是Unicode编码,QT自带的lingiust翻译工具默认是Latin-1编码,这也就会造成我们生成的ts文件中读入的中文字符串会变成乱码。
二、在pro文件中添加
在pro文件中加入下面这一句,代表在pro文件的路径下的Language文件夹里生成用于语言翻译的ts文件,也可以设置你自己喜欢的路径:
TRANSLATIONS += Language/english.ts Language/chinese.ts
三、生成ts文件
在QT Creator上面的菜单栏中找到:工具→外部→Qt语言家→更新翻译,点击后就会在我们刚才在pro文件中设置的路径下生成对应的ts文件。ts文件和XML文件类似,其中包括了我们代码中所有的用tr()括起来的字符串和ui中添加的控件中的文本信息。
四丶编辑翻译语言文件
生成ts文件后,我们要进行编译翻译。使用QT自带的linguist.exe工具可以很方便的进行翻译。这个工具在QT的安装目录下的版本目录下的MSVC目录下的bin目录里,这是我的目录:
打开工具后,把刚才生成的ts文件拖入工具中,所有要翻译的文本信息就全列出来了,一个一个翻译即可。
五、生成qm文件
在linguist中翻译完后点击保存,然后回到Qt Creator中,在刚才更新翻译的下面,有一个发布翻译,点击后,就会在ts文件的相同路径下生成对应的qm文件。
六、 在代码中加载qm文件,实现切换语言
首先,我们在工程中新建一个资源文件,然后把qm文件添加进去,方便加载语言文件的时候写路径。不知道怎么添加资源文件的可以去网上搜一下,这里就不赘述了。
添加好资源文件后,就是在代码中加载语言文件了,直接在main函数中添加,因为要在窗口初始化之前添加语言到翻译文件列表中
#include "Internationalization.h"
#include "Dlg_SelectLanguage.h"
#include <QApplication>
// 使用QTranslator类进行语言翻译
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator* translator = new QTranslator(); // 创建QTranslator类对象
// 初始化选择语言对话框,在主窗口初始化之前初始化语言
Dlg_SelectLanguage dlg_SelectLanguage;
if(dlg_SelectLanguage.exec() == QDialog::Accepted)
{
int index = dlg_SelectLanguage.GetCurrentIndex();
switch (index) {
case 0:
translator->load(":/Language/chinese.qm"); // 加载语言文件
break;
case 1:
translator->load(":/Language/english.qm");
break;
default:
break;
}
a.installTranslator(translator); // 调用QApplication对象中的installTranslator方法将上面加载的语言文件添加到翻译文件列表中
}
// 初始化主窗口界面
Internationalization w;
w.show();
return a.exec();
}