翻译问题总结
1)用tr包裹要翻译的文本信息
2)要准备翻译的所有控件的函数;这里我就以FunSetText()函数为例子,这个FunSetText()函数装了所有我需要翻译的文本内容。
//这个函数有所有我需要设置文本的控件
void FunSetText()
{
ui->pushbutton->setText(tr("Hello"));
}
3)changeEvent事件
protected:
void changeEvent(QEvent *event);
void MainWindow::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
FunSetText(); //触发语言切换事件的时候就会调用FunSetText()这个函数,你所有需要翻译的文本信息就要被刷新一便
break;
default:
QWidget::changeEvent(event);
}
}
4)加载qm文件
connect(mpLanguageEnglish, &QAction::triggered,this,[=]()
{
//英文的qm文件
mTranslator.load(":/English.qm");
qApp->installTranslator(&mTranslator);
});
connect(mpLanguageChinese, &QAction::triggered,this,[=]()
{
//中文的qm文件
mTranslator.load(":/Chinese.qm");
qApp->installTranslator(&mTranslator);
});
5)ui界面需要翻译
void FunSetText()
{
//首先翻译ui中的内容,再翻译你需要翻译的控件的文本信息,如果你的ui界面没有或者不需要翻译就大可不必调用这个函数
ui->retranslateUi(this);
//用户自己定义的控件信息翻译
ui->pushbutton->setText(tr("Hello"));
}
6)文本信息没有翻译
①控件信息没有用tr包裹
②ui->retranslateUi(this);没有放到最前面,导致设置文本信息被清空
③没有调用翻译函数FunSetText()
④类中没有添加Q_OBJECT
⑤重建更新翻译,再次发布生成qm文件
⑥没有加载qm文件
7)dialogbuttonbox中的OK和Cancel按钮翻译(可能没用)
void FunSetText()
{
//分别给OK和Cancel按钮设置文本信息
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("123"));
ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("456"));
}
void MainWindow::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
FunetText();
break;
//多了这个判断,因为当时我的dialogbuttonbox中设置的文本信息被清空 的时候我发现他调用了这个函数,然后我就加了这个函数。
//在公司的项目中我这样做是可以翻译按键的OK和Cancel,如果这样不行我就没有办法了
case QEvent::ActivationChange:
FunSetText();
default:
QWidget::changeEvent(event);
}
}
8)QString内容翻译
//text2是我想要翻译的内容
QByteArray mByteInfo = text2.toLatin1();
const char *mChInfo = mByteInfo.data();
QString Info = text2.toLocal8Bit();
ui->textEdit->append(tr(mChInfo)); //mChInfo是转换好的内容
翻译教程
翻译
有任何不懂的可以私聊我,毕竟有些翻译的工作是我比较早写的,可能当时也遇到了一些问题,可以和我一起了解一下。