qt国际化翻译功能用法

文章目录

    • @[toc]
    • 1 概述
    • 2 设置待翻译文本
    • 3 生成ts翻译源文件
    • 4 编辑ts翻译源文件
    • 5 生成qm翻译二进制文件
    • 6 加载qm翻译文件进行翻译


更多精彩内容
👉内容导航 👈
👉Qt开发经验 👈

1 概述

在 Qt 中,ts 文件和 qm 文件是用于国际化和本地化的关键文件。以下是它们的详细说明:

ts 文件

  • 用途: ts 文件是 Qt 的翻译源文件,存储了应用程序中需要翻译的字符串及其翻译内容。
  • 格式: 它是基于 XML 的文本文件,便于编辑和版本控制。
  • 内容:
    • 包含原始字符串(source)和翻译后的字符串(translation)。
    • 还可能包含上下文(context)信息,用于区分不同模块中的相同字符串。
  • 生成方式:
    • 使用 Qt 提供的工具 lupdate 从源代码中提取需要翻译的字符串,生成 .ts 文件。
    • 示例命令:lupdate myproject.pro -ts translations/myproject_zh_CN.ts
  • 编辑方式:
    • 可以使用 Qt 提供的翻译工具 Qt Linguist 进行翻译。
    • 也可以手动编辑,因为它是 XML 格式。

qm文件

  • 用途: qm 文件是 Qt 的翻译二进制文件,供应用程序运行时加载使用。
  • 格式: 它是 .ts 文件的编译版本,体积更小,加载速度更快。
  • 生成方式:
    • 使用 Qt 提供的工具 lrelease.ts 文件编译为 .qm 文件。
    • 示例命令:lrelease translations/myproject_zh_CN.ts

文件对比

特性TS文件QM文件
可编辑性可人工编辑不可编辑
文件格式XML文本二进制
生成阶段开发阶段构建/发布阶段
文件大小较大(含元数据)较小(优化存储)
运行时依赖不需要必需
环境说明
系统windows11
Qt5.14.2、6.8
IDEqtcreator14

2 设置待翻译文本

  1. 创建一个Qt工程;

    在这里插入图片描述

  2. 在UI文件中添加的文本都可以被翻译;

    在这里插入图片描述

  3. 如果在QObject类的子类中,需要使用tr()包含文本才可以被翻译;

    在这里插入图片描述

  4. 如果在普通函数、或者不是QObject子类的类中,就不能直接使用tr()函数包含待翻译的文本了,可以使用下面几种方式;

    在这里插入图片描述

3 生成ts翻译源文件

方法1:

  • 鼠标右键【添加新文件】;

    在这里插入图片描述

  • 选择【Qt】【Qt Translation File】;

    在这里插入图片描述

  • 选择语言,例如下图中选择English就可以将Qt中文本翻译位英文。

    在这里插入图片描述

方法2:

  • 打开.pro文件,添加如下所示代码,建议文件名包含语言和地区的代码(zh_CNen_US等),会更加名称中缩写推理出适用于什么语言翻译。

    TRANSLATIONS += \untitled9_en_US.ts\a_zh_CN.ts\b_zh_CN.ts
    
  • 然后鼠标选择【工具】【外部】【Linguist】【lupdate】;

    在这里插入图片描述

  • 就可以在工程路径下生成对应的ts文件了;

    在这里插入图片描述

4 编辑ts翻译源文件

  1. 鼠标选择ts文件,右键【Qt语言家】打开ts文件;

    在这里插入图片描述

  2. 如下图所示,Qt UI界面中的文本或者使用tr() QCoreApplication::translate()包含的文件就可以在语言家中呈现。

    在这里插入图片描述

  3. 然后如下图所示,将中文文本翻译为英文文本,填入对应位置;

    在这里插入图片描述

  4. 填写完翻译后,点击工具栏中的,就可以将选中的文本标记为已完成。

    在这里插入图片描述

5 生成qm翻译二进制文件

  1. 编写完成ts文件后,鼠标点击【工具】【外部工具】【Linguist】【lrelease】,就可以将ts文件生成为qm文件。

    在这里插入图片描述

  2. 生成的qm文件如下所示;

    在这里插入图片描述

6 加载qm翻译文件进行翻译

  • 如下所示,使用QTranslator加载qm翻译文件;

    #include "widget.h"#include <QApplication>
    #include <QDebug>
    #include <QTranslator>int main(int argc, char* argv[])
    {QApplication a(argc, argv);QTranslator translator;if (translator.load("E:/test/untitled9/untitled9_en_US.qm")){qDebug() << "加载成功";QCoreApplication::installTranslator(&translator);}else{qDebug() << "加载失败";}qDebug() << "main函数1";qDebug() << QObject::tr("main函数2");qDebug() << QCoreApplication::tr("main函数3", "描述信息");qDebug() << QCoreApplication::translate("main", "main函数4");qDebug() << QCoreApplication::translate("main", "main函数5", "描述信息");Widget w;w.show();return a.exec();
    }
  • 注意:

    • 必须先调用installTranslator()再创建UI对象;
    • 多个翻译器会叠加生效,后加载的优先;
  • 也可以使用QString locale = QLocale::system().name(); // 获取系统语言,例如 "zh_CN"获取操作系统语言来选中使用的qm文件;

  • 加载qm翻译文件成功后如下所示,在ts文件中填写了翻译信息的就会被翻译。

    在这里插入图片描述

  • 如果在程序运行时动态切换语言,需要调用 retranslateUi() 方法刷新界面。例如:

    ui->retranslateUi(this);
    


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

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

相关文章

PyTorch 与 TensorFlow 中基于自定义层的 DNN 实现对比

深度学习双雄对决&#xff1a;PyTorch vs TensorFlow 自定义层大比拼 目录 深度学习双雄对决&#xff1a;PyTorch vs TensorFlow 自定义层大比拼一、TensorFlow 实现 DNN1. 核心逻辑 二、PyTorch 实现自定义层1. 核心逻辑 三、关键差异对比四、总结 一、TensorFlow 实现 DNN 1…

1ms城市算网稳步启航,引领数字领域的“1小时经济圈”效应

文 | 智能相对论 作者 | 陈选滨 为什么近年来国产动画、国产3A大作迎来了井喷式爆发&#xff1f;抛开制作水平以及市场需求的升级不谈&#xff0c;还有一个重要原因往往被大多数人所忽视&#xff0c;那就是新型信息的完善与成熟。 譬如&#xff0c;现阶段惊艳用户的云游戏以及…

【计算机视觉】语义分割:Segment Anything (SAM):通用图像分割的范式革命

Segment Anything&#xff1a;通用图像分割的范式革命 技术突破与架构创新核心设计理念关键技术组件 环境配置与快速开始硬件要求安装步骤基础使用示例 深度功能解析1. 多模态提示融合2. 全图分割生成3. 高分辨率处理 模型微调与定制1. 自定义数据集准备2. 微调训练配置 常见问…

机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)

一、预测facebook签到位置 代码展示&#xff1a; import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…

对ubuntu的简单介绍

目录 1. 简介 2. 核心特点 3. 系统架构与技术亮点 4. 适用场景 5. 优缺点分析 6. 安装与配置建议 7. 未来发展方向 总结 1. 简介 Ubuntu 是基于 Debian 的开源 Linux 操作系统&#xff0c;由 Canonical 公司&#xff08;创始人 Mark Shuttleworth&#xff09;提供商业支…

多商户电商系统整套源码开源,支持二次开发,构建多店铺高效联动运营方案

在数字化浪潮席卷全球的今天&#xff0c;电商行业竞争愈发激烈&#xff0c;多商户电商平台凭借其独特的生态优势&#xff0c;成为众多企业和创业者的热门选择。一套优质的多商户电商系统不仅能为商家提供稳定的销售渠道&#xff0c;还能为平台运营者创造巨大的商业价值。分享一…

Qwen3与Deepseek R1对比(截止20250506)

Qwen3和DeepSeek R1都是在AI领域内备受关注的大规模语言模型。根据最近的评测和报道&#xff0c;以下是Qwen3与DeepSeek R1的一些对比要点&#xff1a; 全面性能&#xff1a; Qwen3被描述为在数学、推理、代码等核心能力上全面超越了DeepSeek R1。特别是在编程能力方面&#x…

Linux56 YUM源配置

epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …

二叉树—中序遍历—非递归

初始状态 假设当前从根节点 b 开始&#xff0c;此时栈为空 。 第一步&#xff1a;处理根节点 b 的左子树 调用 goAlongLeftBranch 函数&#xff0c;从节点 b 开始&#xff0c;因为 b 有左子树&#xff08;节点 a &#xff09;&#xff0c;将 b 入栈&#xff0c;此时栈&#…

R 语言科研绘图第 45 期 --- 桑基图-和弦

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…

ARM 流控制指令

计算机按照严格的顺序执行指令。流控制改变了默认的顺序执行方式。前面已 经介绍了强制跳转到程序中某个非顺序位置的无条件分支。以及依据测试结果 进行跳转的条件分支。这里将介绍子程序调用和返回指令&#xff0c;它们会跳转到一个 指令块、执行这些指令&#xff0c;然后返回…

PDF内容搜索--支持跨文件夹多文件、组合词搜索

平时我们接触到的PDF文档特别多&#xff0c;需要对PDF文档做一些处理&#xff0c;那么今天给大家带来的这两个软件非常的棒&#xff0c;可以帮你提升处理文档的效率。 PDF内容搜索 快速检索 我用夸克网盘分享了「PDF搜索PDF 转长图.zip」&#xff0c;点击链接即可保存。打开「…

个人Unity自用面经(未完)

目录标题 1.在 2D 平台跳跃游戏项目中&#xff0c;你使用了对象池来生成和回收怪物包含阵亡的动画预制件。在对象池回收对象时&#xff0c;如何确保动画状态被正确重置&#xff0c;避免下次使用时出现异常&#xff1f;2.在僵尸吃脑子模拟项目中&#xff0c;你创建了继承于IAspe…

【计网】ICMP、IP、Ethernet PDU之间的封装关系

TCP/IP体系结构 应用层RIP、OSPF、FTP运输层TCP、UDP网际层IP、ARP、ICMP网络接口层底层协议&#xff08;Ethernet&#xff09; 数据链路层 Ethernet报文格式 6Byte6Byte2Byte46~1500Byte4Byte目的MAC地址源MAC地址类型/长度数据FCS 其中&#xff0c;类型 / 长度值小于 1536…

前端取经路——入门取经:初出师门的九个CSS修行

大家好&#xff0c;我是老十三&#xff0c;一名前端开发工程师。CSS就像前端修行路上的第一道关卡&#xff0c;看似简单&#xff0c;实则暗藏玄机。在今天的文章中&#xff0c;我将带你一起应对九大CSS难题&#xff0c;从Flexbox布局到响应式设计&#xff0c;从选择器优先级到B…

n8n工作流自动化平台的实操:Cannot find module ‘iconv-lite‘

解决问题&#xff1a; 1.在可视化界面&#xff0c;执行const iconv require(iconv-lite);&#xff0c;报Cannot find module iconv-lite [line 2]错误&#xff1b; 查看module的路径 进入docker容器 #docker exec -it n8n /bin/sh 构建一个test.js,并写入如何代码 vi tes…

如何在 PowerEdge 服务器上设置 NIC 分组

以下文章提供了有关 Windows、VMware 和 Linux 中的 NIC 分组的信息。 什么是网络适配器分组&#xff1f;设置 NIC 分组 Windows设置 NIC 分组 VMware设置 NIC 分组 Linux 什么是网络适配器分组&#xff08;绑定&#xff09;&#xff1f; 网络适配器分组是一个术语&#xff0…

【Java ee初阶】多线程(5)

一、wait 和 notify wait notify 是两个用来协调线程执行顺序的关键字&#xff0c;用来避免“线程饿死”的情况。 wait 和 notify 其实都是 Object 这个类的方法&#xff0c;而 Object这个类是所有类的“祖宗类”&#xff0c;也就是说明&#xff0c;任何一个类&#xff0c;都…

基于k8s的Jenkins CI/CD平台部署实践(二):流水线构建与自动部署全流程

基于k8s的Jenkins CI/CD平台部署实践&#xff08;二&#xff09;&#xff1a;流水线构建与自动部署全流程 文章目录 基于k8s的Jenkins CI/CD平台部署实践&#xff08;二&#xff09;&#xff1a;流水线构建与自动部署全流程一、Jenkins简介二、系统架构与环境说明1. 系统架构2.…

《Windows 环境下 Qt C++ 项目升级 GCC 版本的完整指南》

Windows 环境下 Qt C++ 项目升级 GCC 版本的完整指南 在 Windows 系统中升级 Qt C++ 项目的 GCC 版本需要同时考虑 Qt 工具链、MinGW 环境以及项目配置的调整。以下是详细的升级步骤和注意事项: 一、升级前的准备工作 1. 确认当前环境 检查 Qt 版本(建议使用 Qt 5.15+ 以获…