vs2015QT项目添加多语言翻译总结
一、简介
当软件有国际化的需求时,就需要多语言翻译功能,最常见的语言就是支持中文和英语,本文介绍在vs2015+QT环境下,进行国际化翻译的具体流程。
二、多语言翻译实现流程
1.底层实现原理介绍
QT写的客户端软件,能够将文字显示为不同的语言,底层实现就是为每一个单词或者标识准备多个翻译,分别存储在不同的二进制文件中,需要切换语言时,加载对应语言的二进制文件,该文件以.qm后缀结尾,在程序运行时,根据该文件中的翻译内容进行显示。
QT提供了专门的类和接口来读取.qm文件中的翻译,QTranslator类和installTranslator()接口.举例如下:
QApplication a(argc, argv);
strPath = QCoreApplication::applicationDirPath() + "/translations/ZH/tetool_zh.qm";
QTranslator* m_pTranslator = new QTranslator(&a);
m_pTranslator->load(strPath); //strPath是.qm文件的路径
qApp->installTranslator(m_pTranslator);
QTranslator类对象负责读取翻译文件中的具体内容, load(strPath)就是.qm文件所在路径;
installTranslator(m_pTranslator) 负责将翻译后的内容装载到程序界面中。
所以要实现语言切换,只需要控制QTranslator类对象去读取不同的qm文件即可。
2.qm文件的来源和ts文件的创建步骤介绍
2.1 qm二进制文件是由.ts文件生成的,qm存储的是二进制格式的翻译内容,.ts文件则以xml的形式进行展现,存储的是人可以看懂的翻译内容,大致内容如下:
<context><name>CMyClass</name><message><location filename="../../MyClass.cpp" line="45"/><source>hello</source><translation>你好</translation></message>
</context>
其中:<name>CWaitingPopup</name> 表示的是类名;
一个<message>节点代表了一个要翻译的字符相关内容;
location节点显示的内容是该字符在MyClass.cpp文件中的45行;
source节点表示的是需要翻译的字符是 hello;
translation 节点表示hello对应的翻译是你好;
QT提供了工具可以根据ts文件中的翻译内容生成二进制格式qm文件,而且生成的文件和ts在同级目录下;在vs2015+QT的环境下,在编辑器中找到一个.ts文件,右键弹出菜单栏,点击lrelease即根据ts文件生成一个qm文件。所以我们只需要创建一个ts文件,并在ts文件中添加对应的翻译即可。
2.2ts文件的创建步骤
在vs2015环境中,要创建QT项目,必须要安装的插件就是Qt VS Tools,安装好之后会在vs2015菜单栏中有对应选项;
点击Qt VS Tools选项,弹出列表,点击Create New translation file列表项;
弹出弹框,选择一种语言,并输入一个文件名,该文件就是以.ts结尾的。例如选择中文并输入MyClass_zh.ts,点击确认按钮之后,就会在项目结构中多出一个MyClass_zh.ts的文件;如下图


2.3ts文件相关操作
当项目中已经有一个ts文件之后,可以右键选择lupdate和lrelease, 执行lupdate指令,会自动更新ts文件中的所有需要翻译的单词或标识,这些标识是需要在代码中标记出来的,使用QString自带的tr("")方法进行标记.
例如新增代码 tr("hello"),执行lupdate指令,使用Qt Lingusit工具打开ts文件(双击ts文件,默认使用Qt Lingusit打开),在Qt Lingusit工具中进行手动翻译,翻译好之后执行lrelease,程序再次运行时,加载新生成的qm文件,界面上显示最新的翻译后的内容。
三、总结
进行多语言翻译基本步骤如下:
1.代码中使用tr()包含需要标识的源符号(一般用英文)。
2.创建ts文件并更新到最新,并对源符号进行翻译。
3.执行lrelease命令生成对应的qm二进制文件;
4.在程序中使用QTranslator类对象读取qm文件,获取翻译内容;
5.使用installTranslator()函数将翻译内容装载到应用程序中;
如果需要翻译成其他语言的内容,只需要新建ts文件时,选择其他的语言,在调用installTranslator()函数时,入参换成新语言对应的QTranslator类对象即可。
相关文章:
vs2015QT项目添加多语言翻译总结
一、简介 当软件有国际化的需求时,就需要多语言翻译功能,最常见的语言就是支持中文和英语,本文介绍在vs2015QT环境下,进行国际化翻译的具体流程。 二、多语言翻译实现流程 1.底层实现原理介绍 QT写的客户端软件,能…...
替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维
时序数据库 IoTDB 应用于宝武集团全基地钢铁时序数据管理,激活数据资产,赋能大型设备智能运维。 1. 背景概述 宝武装备智能科技有限公司(以下简称:宝武智维)是中国宝武设备智能运维专业化平台公司,30 余年始…...
MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现
大家好,我是微学AI,今天给大家介绍一下MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现。MathGPT的核心架构是一个精心设计的多层次系统,旨在有效处理复杂的数学问题。其主要组成部分包括 数学知识图谱…...
前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨
文章目录 前言一、React.js特点使用方法适用场景 二、Vue.js特点使用方法适用场景 三、Angular特点使用方法适用场景 四、如何选择合适的前端框架五、前端框架对项目性能的影响结语 前言 随着互联网技术的飞速发展,前端开发已经从简单的页面展示演变为复杂的应用构…...
MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?
文章目录 MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?一、幻读的定义二、幻读带来的问题(一)语义问题(二)数据一致性问题 三、InnoDB 解决幻读的方法四、总结 MySQL45讲 第二十讲 幻读是什么࿰…...
MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中
MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQ…...
【论文阅读】利用SEM二维图像表征黏土矿物三维结构
导言 在油气储层研究中,黏土矿物对流体流动的影响需要在微观尺度上理解,但传统的二维SEM图像难以完整地表征三维孔隙结构。常规的三维成像技术如FIB-SEM(聚焦离子束扫描电子显微镜)虽然可以获取高精度的3D图像,但成本…...
可靠UDP协议(KCP)使用说明
希望这篇文章,对学习和使用 KCP 协议的读者,有帮助。 1. KCPUDP 流程图 2. 示例代码(待补充) #include <iostream>int main() {// TODO: kcp examplereturn 0; }...
ffmpeg+D3D实现的MFC音视频播放器,支持录像、截图、音视频播放、码流信息显示等功能
一、简介 本播放器是在vs2019下开发,通过ffmpeg实现拉流解码功能,通过D3D实现视频的渲染功能。截图功能采用libjpeg实现,可以截取jpg图片,图片的默认保存路径是在C:\MYRecPath中。录像功能采用封装好的类Mp4Record实现,…...
【Flink】-- flink新版本发布:v2.0-preview1
目录 1、简介 2、非兼容变更 2.1、API 2.2、连接器适配计划 2.3、配置 2.4、其它 3、重要新特性 3.1、存算分离状态管理 3.2、物化表 3.3、批作业的自适应执行 3.4、流式湖仓 4、附加 4.1、非兼容性的 api 程序变更 4.1.2、Removed Classes # 4.1.3、Modified Cl…...
Node.js 版本管理的最终答案 Volta
文章目录 特点安装Unix系统安装Windows系统安装 常用命令volta fetchvolta installvolta uninstallvolta pinvolta listvolta completionsvolta whichvolta setupvolta runvolta help 建议 目前对于前端项目的node 版本,我们一般会在项目 package.json 的 engines 字…...
蓝桥杯每日真题 - 第11天
题目:(合并数列) 题目描述(14届 C&C B组D题) 解题思路: 题意理解:给定两个数组,目标是通过若干次合并操作使两个数组相同。每次合并操作可以将数组中相邻的两个数相加ÿ…...
Vue vs React:两大前端框架的区别解析
在现代前端开发中,Vue.js 和 React.js 是两个最受欢迎的框架和库。我们常常面临选择它们的困惑。虽然这两者在本质上都是为了构建用户界面而设计的,但它们在设计理念、使用方式和生态系统等方面有着显著的区别。今天,我们将通过深入分析这两个…...
【树莓派raspberrypi烧录Ubuntu远程桌面登入树莓派】
提示:本文利用的是Ubuntu主机和树莓派4B开发板,示例仅供参考 文章目录 一、树莓派系统安装下载前准备工作下载安装树莓派的官方烧录软件imagerimager的使用方法 二、主机与树莓SSH连接查看数梅派IP地址建立ssh连接更新树莓派源地址 三、主机端远程桌面配…...
c# 调用c++ 的dll 出现找不到函数入口点
今天在调用一个设备的dll文件时遇到了一点波折,因为多c 不熟悉,调用过程张出现了找不到函数入口点,一般我们使用c# 调用c 文件,还是比较简单。 [DllImport("AtnDll2.dll",CharSet CharSet.Ansi)]public static extern …...
LInux——环境基础开发工具使用(正在更新中...)
1.软件包管理器 Linux下安装软件的方案: 1. 源代码安装 2. rpm包安装 3. 包管理器安装 --- yum/ apt (此图片来自于比特就业课课件) 1.1 操作生态系统 好的操作系统定义: 生态环境好 不同的操作系统根本是生态不同(…...
linux 内核asmlinkage关键字总结
1,看一下asmlinkage的定义 CPP_ASMLINKAGE __attribute__((regparm(0))) GCC中使用__attribute__((regparm(n)))指定最多可以使用n个寄存器(eax, edx, ecx)传递参数,n的范围是0~3,超过n时则将参数压入栈中(…...
⚡️如何在 React 和 Next.js 项目里优雅的使用 Zustand
前言 你是否曾感觉在 React 中管理状态简直是一场噩梦?如果你已经厌倦了不停地处理 props、context 和 hooks,那么现在是时候认识 Zustand 了。Zustand 是一个轻量级的状态管理库,它简化了你处理应用状态的方式。在这篇文章中,我…...
Pinpoint(APM)进阶--Pinot指标采集(System Metric/Inspector)
接上文 Pinpoint使用Pinot进行指标数据存储,Pinot流摄入需要Kafka 本文详解Kafka和Pinot的安装部署,以及Pinpoint的指标采集 Pinot 简介 Apache Pinot是一个实时分布式OLAP数据存储,专为低延迟、高吞吐量分析而构建,非常适合面…...
Mysql:使用binlog的一些常用技巧
1、如何查看binlog的存放路径 show variables like log% 执行结果: 2、如何清除binlog (1)按时间清除 purge binary logs before ‘2023-06-5 10:12:00’ (2)按文件文件名清除 purge binary logs to ‘mybinlog.0000…...
剪映专业版教程:制作堆排序算法原理演示视频
前言 今天教大家用剪映制作堆排序算法的原理演示视频。堆排序的原理是:先将无序序列构建成一个小根堆(堆顶元素是整个堆中最小的),然后反复取出堆顶元素放到有序序列末尾,再将剩余元素重新调整成小根堆,重…...
兜兜转转又回到大浪浪的S05,遥看当年黑丝在,今朝尽染满头霜。
偶然翻看CSDN头像,恍然惊觉已是十五载光阴。2011年拍照于此设头像。初来S05,一路辗转S01,兜兜转转,历经浮沉,如今终究重回最初的S05。这十几年来,方寸代码天地,见证了我的所有成长与蜕变。一路行…...
如何快速掌握CircuitJS1桌面版的3个核心秘诀
如何快速掌握CircuitJS1桌面版的3个核心秘诀 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 CircuitJS1 Desktop …...
书匠策AI降重降AIGC:论文党的“隐身斗篷“真有那么神?
各位被论文折磨到头秃的同学们,先别急着划走!今天咱不讲那些干巴巴的"论文写作技巧",咱聊点真正能救命的黑科技——书匠策AI的降重和降AIGC功能。 你可能会问:市面上降重工具一抓一大把,书匠策AI凭什么让我…...
华为交换机Telnet配置保姆级教程:从无认证到AAA认证,手把手带你避坑
华为交换机Telnet安全配置全指南:从基础到企业级实践 远程管理网络设备是每位网络工程师的必备技能,而Telnet作为最传统的远程登录协议之一,至今仍在许多企业环境中广泛使用。记得我刚入行时,第一次通过Telnet成功登录到一台核心交…...
紫光同创FPGA网络摄像头方案选型指南:OV7725 vs OV5640,YT8531 vs KSZ9031怎么选?
紫光同创FPGA网络摄像头方案选型指南:OV7725 vs OV5640,YT8531 vs KSZ9031深度解析 在工业视觉和安防监控领域,FPGA因其并行处理能力和低延迟特性,成为实时视频采集与传输的理想选择。紫光同创作为国产FPGA的重要代表,…...
告别手动排版!用EndNote 20的Word插件搞定论文参考文献(附中科大培训同款期刊格式下载)
科研写作效率革命:EndNote 20与Word协同实战指南 当论文第三稿被导师要求调整章节顺序时,你是否经历过手动重新编号200条参考文献的绝望?这种场景在科研群体中几乎成为集体记忆痛点——据Nature最新调研显示,87%的研究者曾因文献…...
MindSpore Transformers 训练任务快速上手
MindSpore Transformers(简称 MindFormers)是昇思 MindSpore 生态下的大模型训练套件,集成 BERT、GPT、LLaMA、Qwen 等主流 Transformer 模型,提供一键式预训练 / 微调、分布式并行、混合精度、监控可视化能力,适配昇腾…...
仅限内部技术团队流通:OpenAI官方未公开的API调试技巧——12个隐藏Header与调试模式启用密钥
更多请点击: https://kaifayun.com 第一章:ChatGPT API调用方法 调用 ChatGPT API 需通过 OpenAI 提供的 RESTful 接口,使用 HTTPS 请求向 https://api.openai.com/v1/chat/completions 端点发送 JSON 格式的 POST 请求。核心依赖包括有效的…...
2026年京东云OpenClaw/Hermes Agent配置Token Plan安装详细指南
2026年京东云OpenClaw/Hermes Agent配置Token Plan安装详细指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...
