Qt學習筆記:多語言文件.qm的生成和使用

環境

系統:Windows10 64位 家庭版
Qt版本:5.6.0 msvc2013 32位
編譯器:Visual Studio 2013 專業版

目的

在Qt程序中生成多語言處理所必需的.qm文件,然後添加到工程中並在程序中使用。

示例步驟

1.新建一個Qt Widgets工程,這裏我取名爲Linguist,並添加一個名爲LinguistWidget的類,如下圖所示:
在這裏插入圖片描述2.在LinguistWidget中添加一個QPushButton,用來切換語言和顯示,關鍵代碼如下所示:
LinguistWidget.h文件

#ifndef LINGUISTWIDGET_H
#define LINGUISTWIDGET_H

#include <QWidget>

class QPushButton;

class LinguistWidget : public QWidget
{
    Q_OBJECT

public:
    LinguistWidget(QWidget *parent = 0);
    ~LinguistWidget();

protected:
    void retranslateUi();

private:
    QPushButton* m_pBtnChangeLanguage = Q_NULLPTR;
};

#endif // LINGUISTWIDGET_H

LinguistWidget.cpp文件

#include "LinguistWidget.h"

#include <QPushButton>

LinguistWidget::LinguistWidget(QWidget *parent)
    : QWidget(parent)
{
    m_pBtnChangeLanguage = new QPushButton(this);

    retranslateUi();
}

LinguistWidget::~LinguistWidget()
{

}

void LinguistWidget::retranslateUi()
{
    m_pBtnChangeLanguage->setText(tr("Change Language"));   //這裏要用tr包起來,不然語言家無法識別
}

3.在工程目錄下新建一個文件夾名叫language(這些名字隨便取,但是要和下面的宏一致),用來存放ts文件,如下圖所示:
在這裏插入圖片描述4.在.pro文件中,添加宏:

TRANSLATIONS += language/langEnglish.ts \
                language/langChinese.ts

然後執行qmake,再執行Qt Creator菜單欄中的"工具—>外部—>Qt語言家—>更新翻譯(update)“完成後,工程目錄下的language文件夾裏會有兩個文件,分別是langChinese.ts和langEnglish.ts,如下圖所示:
在這裏插入圖片描述5.在開始菜單中打開如下圖所示的Linguist程序:
在這裏插入圖片描述
6.在Liguist程序中打開步驟2生成的langChinese.ts和langEnglish.ts文件,在打開文件時會彈出語言設置窗口,在窗口中爲相應的文件選擇相應的目標語言,如下兩圖所示,然後選擇OK:
在這裏插入圖片描述在這裏插入圖片描述
7.在彈出的語言翻譯界面中,爲中文添加適當的翻譯(因爲源語言就是英文,所以英文這裏不做翻譯),如下圖所示:在這裏插入圖片描述8.再執行菜單欄中的"文件—>發佈全部”,此時在工程目錄下的language文件夾下會生成兩個文件:langChinese.qm和langEnglish.qm文件,這就是Qt工程最終用的翻譯文件,如下圖所示:
在這裏插入圖片描述9.回到Qt工程,添加一個資源文件,這裏我取名爲Resource(我一開始取名爲src,但是後面取資源文件時無法識別,真是個奇怪的現象),然後添加一個前綴"/",再把步驟8生成的兩個.qm文件添加進來,如下圖所示:
在這裏插入圖片描述10.爲步驟2中添加的QPushButton添加一個槽函數,用來切換語言,關鍵代碼如下:

    connect(m_pBtnChangeLanguage, &QPushButton::clicked, this, [=]{
        m_bDisplayChinese = !m_bDisplayChinese;
        if (m_bDisplayChinese)
        {
            m_pTranslator->load(":/language/langChinese.qm");
        } else {
            m_pTranslator->load(":/language/langEnglish.qm");
        }
        qApp->installTranslator(m_pTranslator);

        retranslateUi();
    });

11.界面一開始如下圖:
在這裏插入圖片描述
單擊一下按鍵變成:
在這裏插入圖片描述

分析:.qm文件放在資源文件中加載和在程序外部加載優劣分析

在資源文件中加載(個人偏向這個):
優點:

  • 在程序發佈時不用把最新的.qm文件拷貝到加載路徑中,降低了修改翻譯時界面沒有翻譯或翻譯不準確的風險;
  • 不會把翻譯的信息暴露給用戶;

缺點:

  • 資源文件會編譯時可執行程序,所以會導致可執行程序的體積變大(但是.qm文件一般很小,這個缺點可以忽略不計);
  • 當只修改翻譯不修改源碼時也必須重新編譯可執行程序。

在程序外部加載:
優點:

  • 當只修改翻譯不修改源碼時不用重新編譯可執行程序,只要替換修改後的.qm文件;
  • 不會影響可執行程序的大小;

缺點:

  • 程序發佈時,要把最新.qm文件中複製到相應加載路徑下(在實際開發中經常會忘了這個步驟),導致沒有翻譯或翻譯不準確;
  • 把翻譯信息暴露給用戶,可能會被用戶修改(不可抗因素,可以忽略)。

示例源碼

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