效果显示:
英文翻译:
中文翻译:
步骤
1、用一个函数用来设置控件的文本信息,我这里用了一个FunSetText()函数封装,并且文本信息用tr(“”);如QPushButton p要设置文本
p->setText(tr("Info")); //用tr("")设置,这是重点,不这样设置到时候翻译的时候识别不出来
2、pro文件中添加 ,添加这个语句之后
TRANSLATIONS = English.ts Chinese.ts
3、点击Qt工程中的更新翻译,如下图所示,更新翻译之后,在你的当前路径下会有两个.ts文件,如果没有生成可以是pro文件中没有添加TRANSLATIONS = English.ts Chinese.ts或者是在其他路径:
生成两个.ts文件:
4、打开QT语言家(如果你的电脑没有装语言家则没有),找到自己编译相对应的语言家版本,以管理员的方式打开,这样更稳定。
5、英–中翻译:如果你要翻译的文本没有用tr("")这样是无法识别的。下图是打开语言家后的界面。
5.1、选择你刚刚生成的.tx文件进行翻译。这里先选择Chinese.tx
5.2、按照步骤设置翻译的内容
5.3、发布生成qm文件-点击文件下的发布
6、英-英翻译;其实相同的语言翻译就把翻译内容和要翻译的问题内容一致即可。因为英-中的步骤我已经写了,英-英的和中-中的翻译一样的步骤就可以,这里就不多加演示了。
7、最后我们就生成了两个.qm文件了
代码:
1、声明一个QTranslator类的变量
QTranslator mTranslator;
2、FunSetText用来给控件设置文本信息,因为没有翻译,都需要更新文本的内容,所有用一个函数封装起来更方便。
void MainWindow::FunSetText()
{
//注意:ui更新要在前面,不然内容会被清空,具体的可以去ui的.h文件中看看retranslateUi()
//更新ui中控件的文本信息
ui->retranslateUi(this);
//更新代码中的文本信息
mpSystemMenu->setTitle(tr("System"));
mpLanguage->setTitle(tr("Language"));
mpSysEnableAction->setText(tr("System Enable"));
mpSysCheckAction->setText(tr("System Check"));
mpSysExitAction->setText(tr("Exit"));
mpLanguageEnglish->setText(tr("English"));
mpLanguageChinese->setText(tr("Chinese"));
ui->pushButton->setText(tr("ChangeWidget"));
}
3、点击了中英文翻译
//点击切换成英文
connect(mpLanguageEnglish, &QAction::triggered,this,[=]()
{
mTranslator.load(":/English.qm");
qApp->installTranslator(&mTranslator); //再加载完翻译文件之后更新文本信息
FunAllSetText();
});
//点击切换成中文
connect(mpLanguageChinese, &QAction::triggered,this,[=]()
{
mTranslator.load(":/Chinese.qm");
qApp->installTranslator(&mTranslator);
FunAllSetText();
});
到此就ok了
注意事项:
1、每次新增或者删除了要翻译的内容,要翻译的时候记得过更新翻译;
2、翻译的本质是重新设置文本,所以向QMessageBox这个点击的时候生成的控件可以不需要提供更新接口,直接加tr()设置即可。
QMessageBox::warning(this,tr("Warning"),tr("Do you want Exit?"),tr("OK"),tr("Cancel"));
3、调用ui->retranslateUi(this)之后再调用FunSetText()重新设置文本,因为ui->retranslateUi(this)用给ui上拉的控件重新设置文本信息,可能会清空文本。
4、加载完翻译文本之后再调用FunSetText()重新设置文本。等翻译文件加载完之后再重新设置才能生效。
程序网盘
为了方便大家使用,我共享在网盘上了,有想要的可以去拿。
第一次完成这么长的一篇文章,喜欢的小伙伴给个支持吧。
链接:https://pan.baidu.com/s/1Amn4DqVEZrhrTz3Vh-Q5FQ
提取码:wzds
网盘链接