1.創建語言文件:
打開.pro文件,加入
TRANSLATIONS+=cn.ts\
en.ts
工具->外部->Qt語言家->更新翻譯(lupdate),將生成翻譯文件cn.ts、en.ts2、編輯翻譯文件
啓動Linguist(Qt語言家),打開cn.ts、en.ts,然後進行編輯,主要是將源文對應的譯文填寫上,最後保存
3、發佈翻譯文件
工具->外部->Qt語言家->發佈翻譯(lrelease),將生成語言文件cn.qm、en.qm
頭文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTranslator>
#include <QEvent>
#include <QLabel>
#include <QComboBox>
#include <QTableWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void init(); //初始化
void refresh(); //刷新
protected:
// virtual void changeEvent(QEvent *e);
private slots:
void slot_cBox(int index);
private:
QLabel *label1;
QLabel *label2;
QComboBox *cBox;
QTableWidget *tableWidget;
QTranslator translator;
QStringList strList;
};
#endif // MAINWINDOW_H
源文件:#include "mainwindow.h"
#include <QApplication>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHeaderView>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
init();
}
MainWindow::~MainWindow()
{
}
void MainWindow::init()
{
translator.load(":/cn.qm");
qApp->installTranslator( &translator );
setWindowTitle(tr("switch language"));
QWidget *widget = new QWidget(this);
QVBoxLayout *vLayout = new QVBoxLayout(widget); //垂直佈局
QHBoxLayout *hLayout = new QHBoxLayout(widget); //水平佈局
label1 = new QLabel(tr("hello world"), this);
label2 = new QLabel(tr("Welcome to Beijing"), this);
cBox = new QComboBox(this);
cBox->addItem(tr("Chinese"));
cBox->addItem(tr("English"));
tableWidget = new QTableWidget(7, 5, widget);
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //自適應寬度
strList << tr("One") << tr("Two") << tr("Three") << tr("Four") << tr("Five");
tableWidget->setHorizontalHeaderLabels(strList);
strList.clear();
strList << tr("Monday") << tr("Tuesday") << tr("Wednesday") << tr("Thursday")
<< tr("Friday") << tr("Saturday") << tr("Sunday");
tableWidget->setVerticalHeaderLabels(strList);
hLayout->addWidget(label1);
hLayout->addWidget(label2);
hLayout->addSpacing(10);
hLayout->addWidget(cBox);
vLayout->addLayout(hLayout);
vLayout->addSpacing(5);
vLayout->addWidget(tableWidget);
//設爲中心控件
setCentralWidget(widget);
resize(500, 285);
connect(cBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_cBox(int)));
}
//每次切換語言後,需調該函數
void MainWindow::refresh()
{
setWindowTitle(tr("switch language"));
label1->setText(tr("hello world"));
label2->setText(tr("Welcome to Beijng"));
cBox->setItemText(0, tr("Chinese"));
cBox->setItemText(1, tr("English"));
// strList << tr("One") << tr("Two") << tr("Three") << tr("Four") << tr("Five");
tableWidget->setHorizontalHeaderLabels(QStringList() << tr("One") << tr("Two")
<< tr("Three") << tr("Four") << tr("Five"));
tableWidget->setVerticalHeaderLabels(QStringList() << tr("Monday") << tr("Tuesday")
<< tr("Wednesday") << tr("Thursday") << tr("Friday")
<< tr("Saturday") << tr("Sunday"));
}
//void MainWindow::changeEvent(QEvent *e)
//{
// if ( e->type() == QEvent::LanguageChange){
// }
//}
//實現動態切換
void MainWindow::slot_cBox(int index)
{
qDebug() << "index:" << index;
switch (index) {
case 0:
translator.load(":/cn.qm");
break;
case 1:
translator.load(":/en.qm");
break;
default:
break;
}
qApp->installTranslator( &translator );
this->refresh();
}
參考git:藉助百度翻譯API實現一個在線翻譯工具
參考文檔:百度翻譯API接口