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 

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文件,如下图所示:
在这里插入图片描述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,然后添加一个前缀"/",再把步骤8生成的两个.qm文件添加进来,如下图所示:
在这里插入图片描述注意:添加完成后要执行一次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,Qt,Qt语言家,翻译,多语言)