qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言

在.pro文件中添加下面几句,支持中文和英文

TRANSLATIONS = lanague_cn.ts\
                lanague_en.ts

在这里插入图片描述

二、通过qt语言家更新翻译生成.ts文件

在这里插入图片描述
完成以后在工程目录可以看到.ts文件
在这里插入图片描述

三、通过linguist翻译文件

在这里插入图片描述
在这里插入图片描述
打开文件
在这里插入图片描述
将两个文件同时选中,打开。
在这里插入图片描述

四、Qt语言家发布文字生成.qm文件

在这里插入图片描述
在这里插入图片描述

五、使用翻译文件进行多语言切换

为了方便多窗口同时切换,使用单例类进行,源码如下:

languageHelper.h
#ifndef LANGUAGEHELPER_H
#define LANGUAGEHELPER_H

#include <QObject>
#include <QMutex>
#include <QTranslator>
#include <QApplication>

class LanguageHelper : public QObject
{
    Q_OBJECT
public:
    enum language {
        chinese,
        english,
        undefined
    };
signals:
    void languageChaned();
private:
    explicit LanguageHelper();
    ~LanguageHelper();
    LanguageHelper(LanguageHelper&) = delete;
    LanguageHelper operator=(const LanguageHelper &) = delete;

public:
    static LanguageHelper *getInstance()
    {
        static QMutex mutex;

        mutex.lock();
        if(languageHelper == nullptr)
        {
            languageHelper = new LanguageHelper();
        }
        mutex.unlock();
        return languageHelper;
    }
    static void quit();
    bool changeLanguage(language l);

private:
    static LanguageHelper *languageHelper;
    QTranslator* translator = nullptr;
    language currentLanguage = language::undefined;
};

#endif // LANGUAGEHELPER_H

languageHelper.cpp
#include "languageHelper.h"

LanguageHelper *LanguageHelper::languageHelper = nullptr;

LanguageHelper::LanguageHelper()
{
    this->translator = new QTranslator();

}

LanguageHelper::~LanguageHelper()
{
    if(this->translator)
    {
        delete this->translator;
        this->translator = nullptr;
    }
    qDebug()<<"~LanguageHelper";
}

void LanguageHelper::quit()
{
    if(languageHelper)
        delete languageHelper;
}

bool LanguageHelper::changeLanguage(language l)
{
    if(l == this->currentLanguage || l == language::undefined)
        return true;
    bool ret = false;
    switch(l)
    {
        case chinese:
        {
            if (this->translator != nullptr)
                qApp->removeTranslator(this->translator);
            ret = this->translator->load("E:/CompanyProjects/KPMG/winccTemp/language/Language/lanague_cn.qm");
            if (ret)
            {
                bool install = qApp->installTranslator(this->translator);
                if (install == false)
                    return false;
            }
            else
                return false;


        }break;
        case english:
        {
            if (this->translator != nullptr)
                qApp->removeTranslator(this->translator);
            ret = this->translator->load("E:/CompanyProjects/KPMG/winccTemp/language/Language/lanague_en.qm");
            if (ret)
            {
                bool install = qApp->installTranslator(this->translator);
                if (install == false)
                    return false;
            }
            else
                return false;
        }break;
        case undefined:
        {

        }break;
    }
    if (ret) {
        this->currentLanguage = l;
        emit languageChaned();
    }
}

通过按钮切换语言:

void MainWindow::on_btnChinese_clicked()
{
    LanguageHelper::getInstance()->changeLanguage(LanguageHelper::chinese);
}


void MainWindow::on_btnEnglish_clicked()
{
    LanguageHelper::getInstance()->changeLanguage(LanguageHelper::english);
}

需要注意的是,在需要实时翻译的界面需要实现languageChaned信号的绑定,然后调用ui->retranslateUi(this);函数,如下:

    connect(LanguageHelper::getInstance(),&LanguageHelper::languageChaned,this,
            [=]()
            {
                ui->retranslateUi(this);
            });

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt实现国际化和多语言切换需要以下步骤: 1. 在Qt项目中创建一个“ts”文件,用于存储翻译后的资源。可以使用Qt自带的工具“Qt Linguist”来创建和编辑这些文件。 2. 在Qt项目中使用Qt翻译API来翻译界面元素。例如,使用tr()函数来标记需要翻译的字符串。 3. 使用lupdate工具来生成一个“.ts”文件,其中包含需要翻译的所有字符串。 4. 使用Qt Linguist编辑器来翻译这些字符串,并将它们保存到“.ts”文件中。 5. 使用lrelease工具来生成一个二进制的翻译文件“qm”文件,其中包含翻译后的资源。 6. 在Qt项目中加载这些翻译文件,并在运行时切换语言。 下面是一个简单的示例代码,演示如何在Qt实现语言切换: ```cpp #include <QApplication> #include <QTranslator> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 加载翻译文件 QTranslator translator; translator.load("myapp_zh.qm"); app.installTranslator(&translator); // 设置界面元素的翻译 QLabel label(tr("Hello World!")); label.show(); return app.exec(); } ``` 在上面的例子中,我们使用了QTranslator类来加载翻译文件,并使用installTranslator()函数将其安装到应用程序中。我们还使用了tr()函数来标记需要翻译的字符串。 当应用程序启动时,它将自动加载当前系统语言对应的翻译文件。如果用户切换了语言,我们只需要重新加载对应的翻译文件即可。 希望这可以帮助你实现Qt中的国际化和多语言切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰搞电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值