您的位置:首页 > 编程语言 > Qt开发

Qt实现多国语言切换

2017-02-21 17:30 645 查看

新建项目

要想进行翻译的文字必须用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: