新建项目
要想进行翻译的文字必须用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