Qt QTranslator多语言翻译例子
Qt QTranslator多语言翻译例子
一、简述
记--使用QTranslator实现国际化或多语言翻译的简单例子。
例子:外链:https://wwm.lanzouq.com/b0caf1u5e 密码:bjvt
二、效果
三、工程结构
四、代码
TranslationTest.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TranslationTest
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
TRANSLATIONS += 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_OBJECT
public:
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.qm
if (translator.load("language.zh_CN.qm", qApp->applicationDirPath().append("/lan/"))) {
qApp->installTranslator(&translator);
ui->retranslateUi(this);//刷新界面
}
福橘挂会机: 代码一样,没有呼吸灯的效果
Ly_Online: 这个你得去学学爬虫和python的自动化测试框架
不是猪猪: 有没有人遇到过(gw_backend.c.533) connect() /home/root/lighttpd/sockets/test.socket-0: Connection refused
XK_0416: 您好,请问一下,这个里面的alsa_play.c,alsa_record,alsa_play.c,head4audio.h和Makefile是需要自己书写的是吗,如果不是的话,它默认是保存在什么地方
hijkstra123: 你好!我使用Qt的qcamera类,编译器提示我,setCaptureMode()和setViewfinder()这两个方法都找不到。 刚开始学习Qt,烦请指点一下吧,谢谢