Qt之國際化--多語言動態切換

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接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章