生成.ts和.qm文件的部分不多赘述,针对有ui文件的实时切换语言:
void MainWindow::on_pushButton_clicked()
{
qApp->installTranslator(&ch);
ui->retranslateUi(this);
}
没有ui文件的需要手动添加部件来实时刷新界面:
void MainWindow::on_pushButton_clicked()
{
qApp->installTranslator(&ch);
button1->setText("new");
}
项目需要翻译的部件较多,无法一个个手动添加,因此选择更改注册表,重启切换语言。想实现的效果是点击中/英按钮,出现弹窗提示“切换语言需要重启程序,确认重启?”,点击ok后重启并切换语言。下面是按钮槽函数:
//! 信号槽
connect(actCH, &QAction::triggered, this, [=] {
switch (QMessageBox::information(this, tr("Language"),
tr("Switching language requires restarting the program. Would you like to restart now?"),
tr("Yes"), tr("No"),
0, 1))
{
case 0:
saveLanguageSetting("ch");
// 重新启动应用程序
QProcess::startDetached(QApplication::applicationFilePath());
// 退出当前进程
QApplication::quit();
break;
case 1:
default:
// 拒绝切换语言
break;
}
});
connect(actEN, &QAction::triggered, this, [=] {
switch (QMessageBox::information(this, tr("Language"),
tr("Switching language requires restarting the program. Would you like to restart now?"),
tr("Yes"), tr("No"),
0, 1))
{
case 0:
saveLanguageSetting("en");
// 重新启动应用程序
QProcess::startDetached(QApplication::applicationFilePath());
// 退出当前进程
QApplication::quit();
break;
case 1:
default:
// 拒绝切换语言
break;
}
});
}
void MainWindow::saveLanguageSetting(const QString& language)
{
QSettings settings("HKEY_CURRENT_USER\\test", QSettings::NativeFormat);
settings.setValue("Language", language);
}
main文件:
QTranslator tran;
QSettings settings("HKEY_CURRENT_USER\\test", QSettings::NativeFormat);
if (settings.value("Language").toString() == "ch") {
tran.load("../i18n/ch.qm");
a.installTranslator(&tran);
}
else if (settings.value("Language").toString() == "en") {
tran.load("../i18n/en.qm");
a.installTranslator(&tran);
}