Qt QTranslator多语言翻译例子
一、简述
记--使用QTranslator实现国际化或多语言翻译的简单例子。
例子:外链:/b0caf1u5e密码:bjvt
二、效果
三、工程结构
四、代码
TranslationTest.pro文件
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = TranslationTestTEMPLATE = appSOURCES += main.cpp\mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.uiTRANSLATIONS += language.zh_CN.ts\language.en.ts
mainwindow.h文件
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QTranslator>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_actionChinese_triggered();void on_actionEnglish_triggered();void on_pushButton_clicked();private:Ui::MainWindow *ui;QTranslator translator;};#endif // MAINWINDOW_H
main.cpp文件
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();}
mainwindow.cpp文件
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);//启动时根据系统环境初始化语言版本,或者是根据配置if (translator.load(QLocale(), "language", ".", qApp->applicationDirPath().append("/lan/"), ".qm")) {qApp->installTranslator(&translator);ui->retranslateUi(this);//刷新界面}//默认勾选的语言版本if (QLocale::Chinese == QLocale().language()) {ui->actionChinese->setChecked(true);ui->actionEnglish->setChecked(false);}}MainWindow::~MainWindow(){delete ui;}//切换到中文翻译void MainWindow::on_actionChinese_triggered(){ui->actionChinese->setChecked(true);ui->actionEnglish->setChecked(false);if (translator.load("language.zh_CN.qm", qApp->applicationDirPath().append("/lan/"))) {qApp->installTranslator(&translator);ui->retranslateUi(this);//刷新界面}}//切换到英文翻译void MainWindow::on_actionEnglish_triggered(){ui->actionChinese->setChecked(false);ui->actionEnglish->setChecked(true);if (translator.load("language.en.qm", qApp->applicationDirPath().append("/lan/"))) {qApp->installTranslator(&translator);ui->retranslateUi(this);//刷新界面}}void MainWindow::on_pushButton_clicked(){QMessageBox::information(this, tr("Tips"), tr("Hello World!"), tr("OK"));}
五、总结
5.1 在代码中使用tr()包含需要翻译的文本内容,
UI界面上的控件文本,默认都是可翻译的
5.2 在.pro文件添加要翻译的语言,例子中添加的是中英文
5.3 生成.ts文件
在源码路径下会生成.ts文件 (与.pro文件添加的.ts文件名一致)
5.4 编辑.ts文件进行翻译
使用Linguist 工具编辑.ts文件。
.ts文件实际上格式是xml格式,可以直接使用文本编辑器进行编辑。
5.4 生成.qm文件
可以使用Linguist生成,也可以使用Qt Creator生成
使用Qt Creator生成
生成的.qm文件
可以添加到资源文件: 优点:不会被用户随意修改;缺点:修改翻译需要重新编译。
例子中直接作为外部文件进行加载:优点:修改翻译不需要重新编译,可单独更新翻;缺点:存在被恶意修改风险。
5.5 代码中加载.qm文件
#include <QTranslator>QTranslator translator;//加载中文 language.zh_CN.qmif (translator.load("language.zh_CN.qm", qApp->applicationDirPath().append("/lan/"))) {qApp->installTranslator(&translator);ui->retranslateUi(this);//刷新界面}