简介
原本的语言是英文,转化成中文,如果想增加其他语言,可以增加好几个.qm文件来实现。
注意:
对用户可见的文本信息全部使用tr()进行封装
步骤
1. 在.pro文件中加入
TRANSLATIONS += Resource/main_widget_zh.ts \
Resource/main_widget_en.ts
2. 选择工具中的外部/语言家(更新翻译),生成.ts文件
3. 打开翻译家,把生成的.ts文件在QT语言家中进行翻译。
4. 选择工具中的外部/语言家(发布翻译),生成.qm文件
(1).打开.ts文件
(2). 选择要翻译的tr()文件内容。
(3). 点击发布
(4). 生成 .qm文件
5. 加入资源文件
6. 加入代码
main.cpp处理如下
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
translator.load(":/qm/main_widget_zh"); //安装默认语言
a.installTranslator(&translator);
MainWindow w;
w.setTranslator(&translator);
w.show();
return a.exec();
}
MainWindow.h处理如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void translateUI();
void setTranslator(QTranslator* translator);
private:
Ui::MainWindow *ui;
QTranslator *translator;
protected: //mouse
void changeEvent(QEvent *event);
private slots:
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
MainWindow.cpp处理如下
void MainWindow::translateUI()
{
this->setWindowTitle(tr("main widget"));
ui->pushButton->setText(tr("Language")); //重新加载UI文本
}
void MainWindow::setTranslator(QTranslator* translator)
{
this->translator = translator;
}
/* 语言切换后,首先会进入changeEvent函数,判断当事件类型为QEvent::LanguageChange时,
* 就会执行translateUI函数进行文本重新显示。
*/
void MainWindow::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
translateUI();
break;
default:
QWidget::changeEvent(event);
}
}
void MainWindow::on_pushButton_2_clicked()
{
translator->load(":/qm/main_widget_zh"); //设置为中文
}
void MainWindow::on_pushButton_3_clicked()
{
translator->load(":/qm/main_widget_en"); //设置为英文
}
效果
1.中文显示
2.英文显示