Qt使用语言家进行国际化,实现多国语言切换


前言

在使用Qt进行项目的开发,国际化的需求还是比较常见的,这里对Qt中国际化的实现进行总结,并结合相应的示例,以便大家学习,如有错误之处,欢迎大家批评指正。

项目效果

请添加图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、生成ts文件

1.这里以我的测试项目为例,新建一个工程后,点击项目的pro文件,添加如下代码并保存

TRANSLATIONS += lang_Chinese.ts\
                lang_English.ts\
                lang_Russian.ts

请添加图片描述

2.依次点击工具–>外部–>Qt语言家–>更新翻译(lupdate)
请添加图片描述

3.这时候可以看到项目的pro文件同级目录下有生成对应的ts文件
请添加图片描述

二、生成qm文件

1.找到你当前项目相同编译环境的语言家(linguist.exe),双击打开
请添加图片描述

2.将之前生成的ts文件一起选中,拖拽到linguist运行界面上,会依次出现以下界面,对各界面进行相应的修改
请添加图片描述

3.依次点击ok后出现如下界面,这里进行各国语言的翻译
请添加图片描述

4.当所有的翻译源完成后,进行保存,再点击文件–>全部发布
请添加图片描述

5.这时候可以看到项目的pro文件同级目录下有生成对应的qm文件请添加图片描述

三、qm文件使用/代码展示

这里将实现选择不同语言时,通过点击按钮修改界面翻译源,完整代码如下
1.widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTranslator>
#include <QDir>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pb_modify_clicked();   //ui界面点击该按钮,右键转到槽自动生成

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

2.widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pb_modify_clicked()
{
    //记录下这几种获取路径常用的方法,大家感兴趣可以去掉屏蔽查看打印结果
    QString applicationDirPath = QCoreApplication::applicationDirPath();   //程序所在路径
    //QString applicationFilePath = qApp->applicationFilePath();             //程序的完整路径
    //QString currentPath = QDir::currentPath();                             //当前工作目录
    //qDebug()<<"applicationDirPath:"<<applicationDirPath<<"   applicationFilePath:"
    //        <<applicationFilePath<<"   currentPath:"<<currentPath;

    //对应的qm文件名称
    //lang_Chinese.qm   lang_English.qm   lang_Russian.qm
    QTranslator myLanguage;
    if(ui->cb_language->currentIndex() == 0)
    {
        //注意路径,这里需要将qm文件放置程序所在路径下
        //myLanguage.load(applicationDirPath + "/lang_Chinese.qm");   //对应qm文件路径
        //建议使用资源文件的方式,这样在发布程序时可以防止文件丢失
        myLanguage.load(":/lang_Chinese.qm");
    }
    else if(ui->cb_language->currentIndex() == 1)
    {
        //myLanguage.load(applicationDirPath + "/lang_English.qm");
        myLanguage.load(":/lang_English.qm");
    }
    else if(ui->cb_language->currentIndex() == 2)
    {
        //myLanguage.load(applicationDirPath + "/lang_Russian.qm");
        myLanguage.load(":/lang_Russian.qm");
    }
    qApp->installTranslator(&myLanguage);
    this->ui->retranslateUi(this);
}

3.widget.ui
请添加图片描述

总结

本文讲述的Qt中使用语言家(linguist)来实现国际化的功能,文中例程也比较简单,实际开发工作中往往会在代码中进行一些控件的文本赋值,这个时候就要考虑到使用tr()函数来对那些文本进行处理,这样才能够让语言家识别到需要修改的文本,当需要更新翻译的时候,重复上述生成ts及qm文件的操作就行了。使用Qt语言家(linguist)生成qm文件的方法都是如文中的一样,实际进行操作下就可以掌握了。


hello:
共同学习,共同进步,如果还有相关问题,可在评论区留言进行讨论。

参考博客:
QT ——添加多国语言
Qt 多国语言详细步骤

文中提到的添加资源文件,可以参考这篇博客:
qt添加资源文件

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中的国际化和多语言切换
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值