当前位置: 首页 > news >正文

QT多语言切换功能

一.目的

在做项目时,有时希望我们的程序可以在不同的国家使用,这样最好的方式是一套程序能适应于多国语言。

Qt提供了这样的功能,使得一套程序可以呈现出不同的语言界面。本文将介绍QT如何实现多语言,以中文和英文为例。

QT开发环境:QT5.12

二.步骤

1.第一步

  新建一个项目工程,在pro文件中添加下面的语句:

TRANSLATIONS += \

    language_en_AS.ts \

    language_zh_AS.ts

这样最终可以生成适用于汉语和英语的ts文件。

2.第二步

然后点击工具-》外部-》语言家-》更新翻译(lupdate)。即使用lupdate工具,生成pro文件中添加的ts文件。

生成这两个ts文件:

3.点击电脑开始菜单,在出现的应用程序列表栏找到Qt安装文件夹,找到Linguist,选择适合自己的Linguist工具,双击打开:

选择需要翻译的ts文件:

确保都是绿色√:

均完成后“文件菜单”内选择保存,发布,会生成qm文件如下路径内:

注意:

如果本身就是中文,目标也是中文,翻译内的部分不用填写,如下:

4.在exe文件所在目录下新建文件夹translator,并将生成的两个qm文件移入

二.代码实现

1.mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QTranslator>

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

    Q_OBJECT

public:

    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

private slots:

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:

    Ui::MainWindow *ui;

    QTranslator m_tran;

};

#endif // MAINWINDOW_H

2.mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QTranslator>

#include <QDebug>

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    ui->textEdit->setText(tr("多语言切换功能"));

}

MainWindow::~MainWindow()

{

    delete ui;

}

void MainWindow::on_pushButton_clicked() //中文

{

    QString strPath = QCoreApplication::applicationDirPath(); //exe文件路径

    bool bSuccess =m_tran.load(strPath + "/translator/language_zh_AS.qm");

    if(bSuccess)

    {

        qApp->installTranslator(&m_tran);

        ui->retranslateUi(this);

    }

    else

    {

        qDebug()<<tr("读取qm文件失败");

    }

}

void MainWindow::on_pushButton_2_clicked()  //英文

{

    QString strPath = QCoreApplication::applicationDirPath(); //exe文件路径

    bool bSuccess =m_tran.load(strPath + "/translator/language_en_AS.qm");

    if(bSuccess)

    {

        qApp->installTranslator(&m_tran);

        ui->retranslateUi(this);

    }

    else

    {

        qDebug()<<tr("读取qm文件失败");

    }

}

void MainWindow::on_pushButton_3_clicked()

{

     ui->textEdit->setText(tr("多语言切换功能"));  //这个需要翻译部分必须用tr()函数

}

说明:

当你使用tr()函数时,Qt会在运行时检查当前的语言环境设置,并查找相应的翻译。如果没有找到翻译,或者当前语言环境与翻译文件不匹配,tr()函数将返回原始字符串。

3.实验结果

(1)初始页面

(2)点击“英文”按钮

(3)点击“测试”按钮

注意:

ui->textEdit->setText(tr("多语言切换功能"));  //需要修改语言环境后执行,这样就会和语言环境一样了 //但不会像button的名字那样按中英文按钮时自动变化

参考文章:

https://blog.csdn.net/weixin_42426713/article/details/132107762

https://blog.csdn.net/sdft06/article/details/130204659

https://blog.csdn.net/blqzj214817/article/details/127396411

http://www.lryc.cn/news/310091.html

相关文章:

  • windows上elasticsearch的ik分词器的安装
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的口罩识别系统(Python+PySide6界面+训练代码)
  • 在Windows系统中启动Redis服务
  • k8s.gcr.io/pause:3.2镜像丢失解决
  • 全面整理!机器学习常用的回归预测模型
  • 在vue中对keep-alive的理解,它是如何实现的,具体缓存的是什么?
  • 章节一、认识three.js与开发环境学习笔记01;
  • QT摄像头采集
  • C语言第三十四弹---动态内存管理(下)
  • PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD
  • Vue开发实例(一)Vue环境搭建第一个项目
  • 将SpringBoot项目改造成solon项目
  • 更详细的软件测试理论基础:流程,开发、测试模型,测试分类,测试用例及其设计方法,缺陷
  • input css padding
  • 如何打印 springboot 框架中 接收请求的日志
  • JVM的内存区域划分
  • YOLOv9有效改进|使用动态蛇形卷积Dynamic Snake Convolution
  • 设计模式学习笔记 - 设计原则 - 1.单一职责原则
  • 飞天使-学以致用-devops知识点4-SpringBoot项目CICD实现(实验失败,了解大概流程)
  • 使用HTML5画布(Canvas)模拟图层(Layers)效果
  • 违背祖训,微软骚操作强制用户更新至 Win 11 23H2
  • MISRA C++ 2023指南:您需要了解的一切
  • Vue:【亲测可用】父组件数组包对象,传给子组件对象,子组件修改属性(字段)后,父组件没有更新
  • hbase学习十:客户端实现与Meta表解析
  • 《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记1
  • 数据结构 - Trie树(字符串统计、最大异或对)
  • 2. vue 工程创建
  • 2024绿色能源、城市规划与环境国际会议(ICGESCE 2024)
  • 0门槛电子画册制作
  • C语言----冒泡排序进阶