Qt 翻译之多语言文件.qm的生成和使用

环境
系统:Windows10 64位 家庭版
Qt版本:5.6.0 msvc2013 32位
编译器:Visual Studio 2013 专业版

目的
在Qt程序中生成多语言处理所必需的.qm文件,然后添加到工程中并在程序中使用。

示例步骤
1.新建一个Qt Widgets工程,这里我取名为Linguist,并添加一个名为LinguistWidget的类,如下图所示:
Qt 翻译之多语言文件.qm的生成和使用_第1张图片

2.在LinguistWidget中添加一个QPushButton,用来切换语言和显示,关键代码如下所示:
LinguistWidget.h文件

#ifndef LINGUISTWIDGET_H
#define LINGUISTWIDGET_H

#include 

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 

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文件,如下图所示:

Qt 翻译之多语言文件.qm的生成和使用_第2张图片

4.在.pro文件中,添加宏:

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

然后执行qmake,再执行Qt Creator菜单栏中的"工具—>外部—>Qt语言家—>更新翻译(update)“完成后,工程目录下的language文件夹里会有两个文件,分别是langChinese.ts和langEnglish.ts,如下图所示:

Qt 翻译之多语言文件.qm的生成和使用_第3张图片

5.在开始菜单中打开如下图所示的Linguist程序:

Qt 翻译之多语言文件.qm的生成和使用_第4张图片

6.在Liguist程序中打开步骤2生成的langChinese.ts和langEnglish.ts文件,在打开文件时会弹出语言设置窗口,在窗口中为相应的文件选择相应的目标语言,如下两图所示,然后选择OK:

Qt 翻译之多语言文件.qm的生成和使用_第5张图片Qt 翻译之多语言文件.qm的生成和使用_第6张图片

7.在弹出的语言翻译界面中,为中文添加适当的翻译(因为源语言就是英文,所以英文这里不做翻译),如下图所示:

Qt 翻译之多语言文件.qm的生成和使用_第7张图片

8.再执行菜单栏中的"文件—>发布全部”,此时在工程目录下的language文件夹下会生成两个文件:langChinese.qm和langEnglish.qm文件,这就是Qt工程最终用的翻译文件,如下图所示:

Qt 翻译之多语言文件.qm的生成和使用_第8张图片

9.回到Qt工程,添加一个资源文件,这里我取名为Resource,然后添加一个前缀"/",再把步骤8生成的两个.qm文件添加进来,如下图所示:

Qt 翻译之多语言文件.qm的生成和使用_第9张图片

注意:添加完成后要执行一次qmake,否则会导致资源文件无法识别和加载的现象。
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文件中复制到相应加载路径下(在实际开发中经常会忘了这个步骤),导致没有翻译或翻译不准确;
把翻译信息暴露给用户,可能会被用户修改(不可抗因素,可以忽略)。

你可能感兴趣的:(♪,--,Qt)