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

来源:互联网 发布:传奇霸业翅膀升级数据 编辑:程序博客网 时间:2024/04/28 13:43

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

0 0
原创粉丝点击