zoukankan      html  css  js  c++  java
  • QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言

    1.效果如下图,开启就自动检测系统语言,选择系统语言显示,

    UI有控件设置,在中文和英文之间切换。。

    2. 源码

    dialog.h

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QDialog>
    #include <QtGui>
    
    class Dialog : public QDialog
    {
        Q_OBJECT
        
    public:
        Dialog(QWidget *parent = 0);
        ~Dialog();
        void translateLanguage();
    
    private:
        QLabel *label1;
        QLabel *label2;
        QComboBox *combox;
        QTranslator *translator;
    
    private slots:
        void comboxChange();
    
    };
    
    #endif // DIALOG_H

    dialog.cpp

    #include "dialog.h"
    #include <QDebug>
    
    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
    {
        QVBoxLayout *vLayout = new QVBoxLayout;
        label1 = new QLabel;
        label2 = new QLabel;
        translator = new QTranslator;
    
        qApp->installTranslator(translator);  //安装翻译器
    
        combox = new QComboBox();
        QStringList list;
        list << "English" << "Chinese";
        combox->addItems(list);
    
        this->translateLanguage();
        vLayout->addWidget(label1);
        vLayout->addWidget(label2);
        vLayout->addWidget(combox);
        setLayout(vLayout);
    
        connect(combox, SIGNAL(currentIndexChanged(int)), this, SLOT(comboxChange()));
    }
    
    void Dialog::translateLanguage()
    {
        label1->setText(tr("test I18N"));
        label2->setText(tr("hello world"));
    }
    
    void Dialog::comboxChange()
    {
        qDebug() << combox->currentText();
    
        if(combox->currentText() == "Chinese")
        {
            translator->load(QString(":/qm/myI18N_zh_CN.qm"));  //选择翻译文件
            this->translateLanguage();
        }
        else
        {
            translator->load(QString(":/qm/myI18N_zh_EN.qm"));
            this->translateLanguage();
        }
    }
    
    Dialog::~Dialog()
    {    
    }
    

    main.cpp

    #include "dialog.h"
    #include <QApplication>
    #include <QTranslator>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QTextCodec *codec = QTextCodec::codecForName("System");
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForTr(codec);
        QTextCodec::setCodecForCStrings(codec);
    
        QTranslator translator;
        QLocale locale;
        if( locale.language() == QLocale::English )  //获取系统语言环境
        {
            qDebug() << "English system" ;
            translator.load(QString(":/qm/myI18N_zh_EN.qm"));  //选择翻译文件
            a.installTranslator(&translator);
        }
        else if( locale.language() == QLocale::Chinese )
        {
            qDebug() << "中文系统";
            translator.load(QString(":/qm/myI18N_zh_CN.qm"));
            a.installTranslator(&translator);
        }
    
        Dialog w;
        w.resize(200,200);
        w.show();
        
        return a.exec();
    }
    

    QRC.qrc

    <!DOCTYPE RCC><RCC version="1.0">
    <qresource>
        <file>qm/myI18N_zh_EN.qm</file>
        <file>qm/myI18N_zh_CN.qm</file>
    </qresource>
    </RCC>
    



     3. 由上可知,国际化的关键是怎么生成 myI18N_zh_CN.qm myI18N_zh_EN.qm 这样的翻译文件??

    步骤一: 将UI控件设置好,需要变换语言的控件,统一在translateLanguage()内设置tr("...."),用英文设置。

    步骤二:在工程pro文件中加入一行  TRANSLATIONS = myI18N_zh_EN.ts,保存文件。

    步骤三:点击工程pro文件打开终端,

    输入命令 $ lupdate I18N.pro   ,后面接的工程pro文件名,执行完后可以发现生成一个 *.ts文件,

    打开可以发现这是xml文档,里面标记有所有tr("...")的内容。

    步骤四:用QT Linguist打开生成的 myI18N_zh_EN.ts文件,选择要翻译成的目标语言

    如图翻译每个tr("..."),并保存,再去查看myI18N_zh_EN.ts即可发现,里面已有翻译标记。

    步骤五:在终端窗口输入 $lrelease I18N.pro 命令, 完成后发现生成所需的二进制文件myI18N_zh_EN.qm。

    如果还要翻译为其他语言,可重复上面的动作,生成不同的 *.qm文件即可。。。

    *.qm文件也可以导入到资源文件QRC.qrc,编译到程序内部。

    *.qm文件生成后,即可按上面程序一样使用,进行语言显示切换。。。

  • 相关阅读:
    赛前一个月
    Barricade---hdu5889(最短路+网络流)
    Tea---hdu5881(规律)
    The Best Path---hdu5883(欧拉路径)
    Cure---hdu5879(打表+找规律)
    Python列表操作
    Zabbix在Docker中的应用和监控
    flannel网络设置
    Volume
    Service资源清单
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648109.html
Copyright © 2011-2022 走看看