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

Qt之国际化--多语言动态切换

2016-07-29 22:02 465 查看
1.创建语言文件:

打开.pro文件,加入

TRANSLATIONS+=cn.ts\

en.ts

工具->外部->Qt语言家->更新翻译(lupdate),将生成翻译文件cn.ts、en.ts

2、编辑翻译文件

启动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接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: