0
点赞
收藏
分享

微信扫一扫

Qt实现多国语言切换


新建项目

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

Qt实现多国语言切换_#include


Qt实现多国语言切换_javascript_02

生成语言包

切换到所在的项目,输入

lupdate test.pro -ts zh-CN.ts

其中test.pro是项目的名字,en.ts是你想生成的语言包的名字

Qt实现多国语言切换_xml_03


项目中会多了一个ts文件

Qt实现多国语言切换_javascript_04


为了对文字进行翻译,你可以直接打开这个文件进行编辑,也可以用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

Qt实现多国语言切换_xml_05


文件下多了一个qm文件

Qt实现多国语言切换_xml_06


Qt实现多国语言切换_xml_07


Qt实现多国语言切换_#include_08

源码

mainwindow.h

#ifndef MAINWINDOW_H
#define

#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.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

源码下载

实现语言的切换

Qt实现多国语言切换_#include_09


Qt实现多国语言切换_javascript_10

举报

相关推荐

0 条评论