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);//刷新界面
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值