Qt实现多国语言切换

17 篇文章 1 订阅

新建项目

要想进行翻译的文字必须用tr()进行包裹,ui界面中的文字有设置是否进行翻译的选项,默认是选中的
这里写图片描述
这里写图片描述

生成语言包

切换到所在的项目,输入

lupdate test.pro -ts zh-CN.ts

其中test.pro是项目的名字,en.ts是你想生成的语言包的名字
这里写图片描述
项目中会多了一个ts文件
这里写图片描述
为了对文字进行翻译,你可以直接打开这个文件进行编辑,也可以用Qt安装目录下的linguist.exe打开进行编辑,LZ用linguist.exe编辑,看看文件发生了哪些变化,以后直接修改文件即可
LZ用的是Qt5.7,linguist.exe的位置是,仅供参考

D:\Qt5.7\5.7\mingw53_32\bin

编辑前

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
    <name>MainWindow</name>
    <message>
        <location filename="mainwindow.ui" line="14"/>
        <source>MainWindow</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="27"/>
        <source>this is a demo to show language switch</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="40"/>
        <source>ok</source>
        <translation type="unfinished"></translation>
    </message>
</context>
</TS>

编辑后

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>MainWindow</name>
    <message>
        <location filename="mainwindow.ui" line="14"/>
        <source>MainWindow</source>
        <translation type="unfinished">主窗口</translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="27"/>
        <source>this is a demo to show language switch</source>
        <translation type="unfinished">这是一个语言切换的例子</translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="40"/>
        <source>ok</source>
        <translation type="unfinished">确定</translation>
    </message>
</context>
</TS>

所以用软件翻译也只是给XML标签赋值,你可以直接赋值
在test.pro文件最后加上

TRANSLATIONS = zh-CN.ts

如果有多个语言包,中间用\分隔即可

TRANSLATIONS = en.ts \
               zh-TW.ts

接着就是发布翻译了,输入下面即可

lrelease zh-CN.ts -qm zh-CN.qm

这里写图片描述
文件下多了一个qm文件
这里写图片描述
这里写图片描述
这里写图片描述

源码

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();
    //语言切换的标志位
    int type = 1;
    QTranslator myTranslator;
private slots:
    //点击按钮实现语言切换
    void on_okBtn_clicked();
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_okBtn_clicked()
{
    if (type) {
        myTranslator.load("../test/zh-CN.qm");
        qApp->installTranslator(&myTranslator);
        ui->retranslateUi(this);
        type = 0;
    } else {
        qApp->removeTranslator(&myTranslator);
        ui->retranslateUi(this);
        type = 1;
    }
}

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //如果想一开始就加载语言包,可以用下面的方法,但没想到卸载语言包的方法
    /*QTranslator translator;
    bool flag;
    //我这里用的是相对路径,一开始就加载为英文
    flag = translator.load("../test/zh-CN.qm");
    if (flag)
        qDebug() << "加载成功";
    a.installTranslator(&translator);*/
    MainWindow w;
    w.show();    
    return a.exec();
}

源码下载

http://download.csdn.net/detail/zzti_erlie/9763762
实现语言的切换
这里写图片描述
这里写图片描述

参考文献

[1]http://www.cnblogs.com/oloroso/p/4596740.html
[2]http://blog.csdn.net/csf111/article/details/7752839
[3]http://blog.csdn.net/houqd2012/article/details/37660589
[4]http://blog.csdn.net/sinat_35523212/article/details/52348934

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值