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.mzph.cn/news/716709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

过于老旧的pytorch_ssim包 请从github下载源码

有些冷门算法真的不要随便pip&#xff0c;有可能下载到史前版本…最好还是找源代码 汗 今天要用到SSIM损失函数&#xff0c;从网上简单看了一下原理就想测试一下&#xff0c;偷了一下懒就直接在命令行输入pip install pytorch_ssim了&#xff0c;结果报了一堆错误&#xff08;汗…

Qt将Unicode转换成UTF8中文

解析字符串&#xff0c;并将里面的Unicode转换成中文 QString unicodeToUtf8(QString unicode) {QString result;for (int i 0; i < unicode.length(); i){QString flag unicode.mid(i,2); if (flag "\\u"){QString s1 unicode.mid(i 2, 4);result.append(s…

如何自定义一个spring-boot-starter

在我的理解中&#xff0c;spring-boot-starter就是一个依赖工具包&#xff0c;但是它和普通的依赖又有所区别&#xff0c;那么首先spring-boot-starter-一定是一个spring-boot项目&#xff0c;然后它和一般的依赖有什么区别呢&#xff0c;我们可以在它的resources目录下定义一个…

Mysql实战(1)之环境安装

1&#xff0c;进入&#xff1a;MySQL :: MySQL Downloads 2&#xff0c; 3&#xff0c; 4&#xff0c;

【数据集】中国广泛时空水质数据集(1980-2022)

中国广泛时空水质数据集(1980-2022) 1 数据概述1.1 数据细节2 数据下载下载链接1:figshare参考1 数据概述 水质数据是评估水生生态系统福祉和确保人类清洁水源的关键资源。虽然水质数据集的可用性正在增长,但值得注意的是,中国缺乏可公开访问的内陆和海洋国家水质数据集。…

Python算法题集_单词搜索

Python算法题集_单词搜索 题22&#xff1a;单词搜索1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【原始矩阵状态回溯】2) 改进版一【字典检测原始矩阵状态回溯】3) 改进版二【矩阵状态回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一…

DM数据库学习之路(十九)DM8数据库sysbench部署及压力测试

sysbench部署 安装依赖 yum -y install make automake libtool pkgconfig libaio-devel vim-common 上传sysbench源代码 sysbench_tool.tar 测试是否安装成功 $ /opt/sysbench/sysbench-master-dpi/src/lua $ ./sysbench --version sysbench 1.1.0 sysbench测试DM 测试…

jupyter调用envs环境——jupyter内核配置虚拟环境

1.jupyter无法使用envs环境 pycharm的终端打开jupyter notebook&#xff1a; 在kernel下找不到上面的Pytorch_GPU环境&#xff1a; 2.解决方法 在对应的envs环境中安装ipykernel&#xff1a; 将该环境写入jupyter&#xff1a; python -m ipykernel install --user --name Py…

基于分位数回归的长短期记忆神经网络(QRLSTM)的MATLAB实现(源代码)

分位数回归的长短期神经记忆网络介绍&#xff1a; QRLSTM&#xff08;Quantile Regression Long Short-Term Memory&#xff09;分位数回归神经网络是一种结合了长短期记忆&#xff08;LSTM&#xff09;神经网络和分位数回归的模型。这种神经网络结构旨在对数据的不同分位数进行…

Java的四大引用详解-冲击金三银四

强引用 像“Object obj new Object()”这类的引用均为强引用&#xff0c;当一个对象被强引用变量引用时&#xff0c;它处于可达状态&#xff0c;是不可能被垃圾回收器回收的&#xff0c;即使该对象永远不会被用到也不会被回收。 当JVM出现内存不足时&#xff0c;JVM进行垃圾回…

继承-重写

Phone基类&#xff1a; package ven;public class Phone {public Phone(){}public void call(String name){System.out.println("给"name"打电话");} } AIPhone子类&#xff1a; package ven;public class AIPhone extends Phone{Override //重载注解&am…

mTLS: openssl创建CA证书

证书可以通过openssl或者keytool创建&#xff0c;在本篇文章中&#xff0c;只介绍openssl。 openssl 生成证书 申请操作流程 生成ca证书私钥, 文件名&#xff1a;ca.key生成ca证书&#xff0c;文件名&#xff1a;ca.crt生成Server/Client 证书私钥&#xff0c;文件名&#x…

设计模式(十三)抽象工厂模式

请直接看原文:设计模式&#xff08;十三&#xff09;抽象工厂模式_抽象工厂模式告诉我们,要针对接口而不是实现进行设计。( )-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- …

系统架构设计文档模版

XX 系统架构设计方案 修订记录 日期 版本号 修订说明 修订人 审核人 1、概述... 5 1.1&#xff0e;业务背景... 5 1.2&#xff0e;系统总体描述... 5 1.3&#xff0e;系统边界图... 5 1.4&#xff0e;名词和缩略语... 5 1.…

live555源码学习(1)

1 基础组件 live项目主要包含了四个基础库、程序入口类&#xff08;mediaServer&#xff09;和测试程序&#xff08;testProgs&#xff09;。四个基础库是UsageEnvironment、BasicUsageEnvironment、groupsock和liveMedia UsageEnvironment 抽象了两个类UsageEnvironment和T…

力扣hot5---双指针

题目&#xff1a; 解决方案&#xff1a;双指针 指针 i 指向最左侧&#xff0c;指针 j 指向最右侧。此时在宽度上达到了最大值&#xff0c;那么哪个柱子更矮&#xff0c;哪个柱子向内部移动&#xff0c;知道 i 与 j 相遇。为什么呢&#xff1f; 如果哪个哪个柱子更矮&#xff0c…

代码随想录算法训练营第四十一天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

Node.js基础---模块化

基本概念 模块化 模块化是指解决一个复杂问题时&#xff0c;自上向下逐层把系统划分成若干模块的过程&#xff0c;对于整个系统来说&#xff0c;模块是可组合&#xff0c;分解和更换的单元 遵守固定规则&#xff0c;把大文件拆分成独立并互相依赖的多个小模块 好处&#xff1a…

【计算机毕业设计】208基于SSM的在线教育网站

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

OLLAMA:如何像专业人士一样运行本地语言模型

原文 https://cheatsheet.md/llm-leaderboard/ollama.en简介&#xff1a;揭示 OLLAMA 对本地语言模型的强大功能 您是否曾经发现自己陷入了基于云的语言模型网络中&#xff0c;渴望获得更本地化、更具成本效益的解决方案&#xff1f;好吧&#xff0c;您的搜索到此结束。欢迎来…