Qt多语言功能实现

news2024/9/21 22:45:33

本文介绍Qt多语言功能实现。

应用程序多语言支持是常用功能,比如产品需要出口到不同语种的国家。采用Qt的多语言支持工具可以方便实现应用程序的多语言功能。本文以中英文语言切换为例,简要介绍Qt的多语言功能实现。

1.界面设计

界面设计需要考虑使用语言字符宽度,比如相同语义下,中文相对简洁,而英文就相对冗长一些,设计时可考虑以英文为设计界面。如本例所设计的界面如下:

2.字符串处理

字符串处理是针对代码逻辑实现过程中,需要显示到界面的字符串,比如图中的“switch”在中文的时候需要显示成“切换”。在代码中,尽量统一使用英文来描述,并使用特殊的字符串包裹,如在Qt中需要使用“tr”包裹需要多语言支持的字符串。参考代码如下:

ui->label->setText(tr("hello"));

3.翻译过程

翻译的过程最主要的就是生成对应不同语言的qm文件。

1)工程配置

在Qt Creator中,在项目中的“.pro”中增加需要生成ts文件名,以方便后续按此文件名生成ts文件。如本例中想要生成英中文的ts文件,文件名分别为:“en_tr.ts”,“zh_tr.ts”,参考代码如下:

TRANSLATIONS += en_tr.ts \
                zh_tr.ts

2)ts文件生成

在Qt Creator中,点击Tools -> External -> Linguist -> Update Translations(lupdate)即可生成ts文件。在消息输出中可以检查是否成功生成,也可以在工程目录下查看是否有2个ts的文件。

3)翻译内容

打开“Qt Linguist”工具,这里使用的是Linux系统,需要在安装目录的“bin”目录中查找“linguist”可执行程序。打开需要翻译的ts文件,如我们需要对中文进行翻译,则打开“zh_tr.ts”文件,依次填写翻译内容。如下图。

4)生成qm文件

qm文件是程序中根据选择语言(这里是中英文)的不同实际要加载的文件。它的生成有如下2种方法:

a)直接在“Qt Linguist”工具中,File -> Release,即可在项目目录中生成对应的qm文件(需要先打开相应的ts文件)。

b)在Qt Creator中,Tools -> External -> Linguist -> Release Translations(lrelease)。

注意:2者的区别是,b)方法可以一次生成所有的qm文件,而a)方法需要打开不同的ts文件2次。

4.程序实现

生成最终想要的qm文件后,就可以在代码中实现多语言的切换了。以中英文切换为例,我们在按下“switch”按钮后切换另一种语言,参考代码如下:

void MainWindow::on_pushButton_clicked()
{
    QTranslator translator;
    bool bOK = false;

    QString strPath = QCoreApplication::applicationDirPath();
    if (!bSwitched) {
        bOK = translator.load(strPath + "/zh_tr.qm");
    } else {
        bOK = translator.load(strPath + "/en_tr.qm");
    }

    if (bOK) {
        qApp->installTranslator(&translator);
        ui->retranslateUi(this);

        bSwitched = !bSwitched;
    }

    ui->pushButton->setText(tr("switch"));
    ui->label->setText(tr("hello"));
}

注意

1)这里的qm文件需要提前拷贝到可执行文件所在目录。

2)可以在类构造函数中添加上述类似代码,在软件启动过程中加载默认语言。

总结,本文介绍了Qt多语言功能实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947109.html

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

相关文章

AWS 中国区同账号0etl integration配置步骤

中国区的AWS支持0etl integration已经一段时间了,目前北京区和宁夏区均支持。中文翻译为零ETL集成。 当前支持的引擎是Aurora MySQL数据托管式导出到Redshift. Global区域支持Aurora PostgreSQL. 中国区后续也会陆续出现此功能的。 功能介绍文档: 【1…

读取DS18B20温度、测量环境温度信息(单只DS18B20写法)

一、前言 1.1 功能介绍 随着工业自动化和智能家居技术的不断发展,精确测量和监控环境温度变得尤为重要。在许多应用场景中,如仓库管理、温室控制、空调系统以及工业制造过程中,实时准确地获取环境温度信息对于保障设备正常运行、提高能源利…

Python面试宝典第19题:最小路径和

题目 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[1, 3, 1], [1, 5, 1], [4, 2, 1]] 输出&…

【帆软报表开发】决策系统挂载报表

登陆决策系统 点击服务器->报表平台管理登陆或者输入网址http://IP:端口号/webroot/decision登陆(默认端口号:8075) 第一次需要输入超级管理员的用户名和密码,然后登陆决策系统 成功登陆决策系统 报表模板所在位置 制作好的报…

PHP安全编程宝典:30000字精细解析

文章目录 基础语法单双引号的区别前后端分离数据类型PHP常量函数var_dump函数count函数print_r函数**readfile()函数****file_get_contents()函数****file_put_contents()函数**header函数fopen函数fread 函数rename函数copy()函数…

生活实用英语口语“拆迁”用英文怎么说?柯桥成人学英语到蓝天广场

● 1. “拆迁”英语怎么说? ● 01. 其实国外也有拆迁 但国外的拆迁,只管拆 不管安置,你爱去哪去哪 英文可以说 housing removal 02. 但我们中国的“拆迁” 既管“拆”也管“迁” (还是中国人幸福~) 英文可以说 housin…

C语言 ——— 函数指针的定义 函数指针的使用

目录 何为函数指针 打印 函数名的地址 及 &函数名的地址 函数指针的代码(如何正确存储函数地址) 函数指针的使用 何为函数指针 类比: 整型指针 - 指向整型数据的指针,整型指针存放的是整型数据的地址 字符指针 - 指向字…

视觉语言动作模型:从网页知识到机器人控制的实战RT-2

作者: Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar, Xi Chen, Krzysztof Choromanski, Tianli Ding, Danny Driess, Avinava Dubey, Chelsea Finn, Pete Florence, Chuyuan Fu, Montse Gonzalez Arenas, Keerthana Gopalakrishnan, Kehang Han…

等级保护 总结2

网络安全等级保护解决方案的主打产品: HiSec Insight安全态势感知系统、 FireHunter6000沙箱、 SecoManager安全控制器、 HiSecEngine USG系列防火墙和HiSecEngine AntiDDoS防御系统。 华为HiSec Insight安全态势感知系统是基于商用大数据平台FusionInsight的A…

VMware 17.5.2 下载安装教程

迅雷: 分享文件:VMware17.5.2 链接:https://pan.xunlei.com/s/VO2YWzmIoNXXUziaESHVX2OrA1?pwdhbqh# 百度网盘: 链接: https://pan.baidu.com/s/18iexDwJAec9OkATYnfUlSg?pwd8888 提取码: 8888 1.双击安装包运行 2.若出现以…

《软件导刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《软件导刊》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《软件导刊》级别? 答:省级。主管单位:湖北省科学技术厅 主办单位:湖北…

Redisson分布式锁使用详解

引言 日常开发中,难免遇到一些并发的场景,为了保证接口执行的一致性,通常采用加锁的方式,因为服务是分布式部署模式,本地锁Reentrantlock和Synchnorized这些就先放到一边了,Redis的setnx锁存在无法抱保证原…

VBA技术资料MF178:将某个文件夹中的图片导入Word

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

敏捷开发笔记(第13章节)--COMMAND模式和ACTIVE OBJECT模式

1:PDF上传链接 【免费】敏捷软件开发(原则模式与实践)资源-CSDN文库 没有人天生就具有命令他人的权利。 --Denis Diderot(1713一1784,法国哲学家,百料全书编者) 在近几…

20240724----安装git和配置git的环境变量/如何用命令git项目到本地idea

备注参考博客: 1)可以参考博客,用git把项目git到本地 2)可以参考博客vcs没有git 3)git版本更新,覆盖安装 (一)安装git (1)官网下载的链接 https://git-scm.com/downlo…

【轨物方案】新型储能管理系统(EMS)解决方案

储能EMS作为储能系统的大脑,其重要性不言而喻,但是随着储能行业的不断扩大以及对应产品的不断升级,其对应的售后运维变得越来越复杂,储能系统急需配备完善的EMS系统来监控和优化自身的运营状态,同时满足售后运维&#…

LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】

【链表】No. 0206 反转链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

Docker-Compose配置zookeeper+KaFka+CMAK简单集群

1. 本地DNS解析管理 # 编辑hosts文件 sudo nano /etc/hosts # 添加以下三个主机IP 192.168.186.77 zoo1 k1 192.168.186.18 zoo2 k2 192.168.186.216 zoo3 k3注:zoo1是192.168.186.77的别名,zoo2是192.168.186.18的别名,zoo3是192.168.186.1…

JavaScript(14)——DOM

Web API 作用:就是使用JS去操作html和浏览器 分类:DOM(文档对象模型)、BOM(浏览器对象模型) DOM DOM是用来呈现以及与任意HTML或XML文档交互的API,简单来说就是操作网页的内容。 DOM树 将H…

Ansible的脚本-----playbook剧本【下】

目录 实战演练六:tags 模块 实战演练七:Templates 模块 实战演练六:tags 模块 可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。 playboo…