Qt ts文件详解
Qt ts文件(Translation Source file:翻译源文件)是Qt框架中用于存储翻译文本和相关上下文信息的一种特定格式文件,它是Qt Linguist(语言家)工具使用的基础。Qt Linguist是Qt开发工具包中的一个应用程序,专门用于本地化和国际化Qt应用程序。
Qt ts文件的结构
Qt ts文件是基于XML格式的文本文件,用于存储翻译文本和相关的上下文信息。这种格式使得翻译人员能够清晰地看到原文、上下文和翻译内容,便于进行准确的翻译工作。
文件声明
Qt ts文件通常以XML声明开始,指定了文件的版本和编码方式。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<?xml version="1.0" encoding="UTF-8"?>声明了这是一个XML文件,使用UTF-8编码。
<!DOCTYPE TS>指定了文档类型为TS。
<TS version="2.1" language="zh_CN">标签则包含了TS文件的版本号和语言代码【1】。
【1】:language属性的值为相应语言的BCP 47标签代码。BCP47是一种标签格式的建议标准,这个标准定义了一种语言标签的特定格式,通常用于软件国际化和语音识别等领域。一个BCP 47语言标由多个子标记组成,这些子标记通过连字符(-)分隔【2】
子标记的类型和顺序通常遵循以下规则:
- 语言代码(Language):通常是定义的两个或三个字母的代码,代表一种语言。例如,zh代表中文,en代表英文。
- 脚本代码(Script):可选,定义的四个字母代码,用于表示书写系统。例如,Hans代表简体中文(汉字简化字形),Hant代表繁体中文(汉字传统字形)。
- 地区代码(Region):可选,定义的两个字母代码,或者UN M.49标准中的三位数字代码,用于表示特定的地理区域或国家。例如,CN代表中国大陆,US代表美国。
示例:
zh:表示中文(不特定于简体或繁体)。
zh-Hans:表示简体中文。
zh-Hant:表示繁体中文。
zh-CN:表示中国大陆使用的中文(默认为简体中文)。
en-US:表示美国英语。
【2】:按照BCP 47的严格规范,应该使用短横线(-)而不是下划线(_)。在实际的Qt .ts文件中,你可能会看到语言代码和国家/地区代码之间使用下划线(_)作为分隔符的情况,特别是在language属性中。在这种情况下,尽管它可能不会影响Qt工具(如Qt Linguist)的正确解析,但最好还是按照BCP 47的规范,将其更改为使用短横线(-)来分割。
上下文(context)
在Qt ts文件中,可以定义多个上下文(context),用于将翻译字符串分组到相关的逻辑部分中。虽然这不是必需的,但它有助于翻译人员更好地理解字符串的用途和上下文环境。然而,在标准的Qt ts文件中,上下文通常是通过<context>标来指定的,而不是直接作为XML结构的一部分。
消息(Message)
<message>标签是Qt ts文件中最核心的部分,它包含了需要翻译的字符串及其相关信息。每个<message>标签都包含以下子元素:
- location(可选):指定了源代码中字符串的位置,包括文件名和行号,有助于翻译人员查找原始字符串。
- source:包含原始(未翻译)的字符串。
- translation:包含翻译后的字符串。在初始的ts文件中,这个元素可能是空的,等待翻译人员填写。
- comment(可选):提供关于字符串的额外信息或注释,帮助翻译人员理解字符串的用途或上下文。
- numerusforms(可选):当字符串包含可变的数字部分时,可以使用此元素来提供不同数量下的翻译选项。
<context> //上下文<name>MainWindow</name> //上下文名称<message> //消息<location filename="mainwindow.ui" line="14"/> <source>打开文件</source> <translation>Open File</translation> </message> <!-- 其他消息 -->
</context>
<!-- 其他上下文 --> /* 在这个例子中,<context>标签的<name>属性指定了上下文的名称为“MainWindow”,它表示这个上下文中 * 的字符串都与主窗口相关。在<context>标签内部,<message>标签定义了需要翻译的字符串“打开文件”及 * 其翻译“Open File”。 */
使用lupdate工具生成.ts文件
参见链接:Qt使用lupdate工具生成.ts文件-CSDN博客
注意事项
- Qt ts文件的结构相对简单,主要围绕<message>标签展开。
- 上下文(context)通常通过<context>标签指定,而不是作为XML结构的一部分。
- 在编辑Qt ts文件时,应确保使用UTF-8编码,以避免编码问题。
- Qt Linguist是编辑Qt ts文件的推荐工具,它提供了直观的界面来查看、编辑和管理翻译字符串。
- Ts文件不会被包含进Qt应用程序,通过ts文件编译生成的qm文件会被包含进Qt应用程序中。
ts文件举例
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context><name>frmrecordreplay</name><message><location filename="frmlocalsetting/frmrecordreplay.ui" line="14"/><source>Form</source><translation type="unfinished">Form</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="252"/><source>Begin play record</source><translation type="unfinished">Begin play record</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="259"/><location filename="frmlocalsetting/frmrecordreplay.cpp" line="287"/><source>Stop playback control request</source><translation type="unfinished">Stop playback control request</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="278"/><source>Continue playback control request</source><translation type="unfinished">Continue playback control request</translation></message>
</context>
<context><name>frmtelbookbase</name><message><location filename="frmtelbook/frmtelbookbase.ui" line="14"/><source>Form</source><translation type="unfinished">Form</translation></message><message><location filename="frmtelbook/frmtelbookbase.ui" line="73"/><source>TextLabel</source><translation type="unfinished">TextLabel</translation></message><message><location filename="frmtelbook/frmtelbookbase.cpp" line="27"/><source>Are You Delete It ?</source><translation type="unfinished">Are You Delete It ?</translation></message>
</context>
<context><name>frmtelwidgetbase</name><message><location filename="frmtelwidget/frmtelwidgettbase.ui" line="32"/><source>Form</source><translation type="unfinished">Form</translation></message>
</context>
</TS>
相关文章:
Qt ts文件详解
Qt ts文件(Translation Source file:翻译源文件)是Qt框架中用于存储翻译文本和相关上下文信息的一种特定格式文件,它是Qt Linguist(语言家)工具使用的基础。Qt Linguist是Qt开发工具包中的一个应用程序&…...
操作系统 IO 相关知识
操作系统 IO 相关知识 阻塞与非阻塞同步与异步IO 和系统调用传统的 IODMAmmap 内存映射sendfilesplice 常用的 IO 模型BIO:同步阻塞 IONIO:同步非阻塞 IOIO 多路复用信号驱动 IOAIO:异步 IO 模型 IO 就是计算机内部与外部进行数据传输的过程&…...
C++_手写share_ptr
以下是一个简化版的 shared_ptr 的实现: #include <iostream> template <typename T> class SimpleSharedPtr { public:// 构造函数explicit SimpleSharedPtr(T* ptr nullptr) : ptr_(ptr), count_(ptr ? new size_t(1) : nullptr) {}// 拷贝构造函数…...
【启明智显方案分享】6.86寸高清显示屏音频效果器解决方案
一、项目概述 本方案旨在设计一款集成6.86寸高清触摸显示屏的音频效果器,通过HMI(Human-Machine Interface)芯片Model 4驱动,实现高清晰度的视觉交互。该设备不仅支持音乐、麦克风及温响音量的精细控制,还内置丰富的预…...
vue设置每次加载页面时展示一个双开门效果
一、首先创建一个双开门的蒙层组件 <!-- DoorOverlay.vue --> <template><div v-if"isVisible" class"door-overlay"><div class"door left-door"></div><div class"door right-door"></div&…...
简单的docker学习 第8章 docker常用服务安装
第8章 常用服务安装 本章主要学习最常用的,也是安装起来稍有些麻烦的 MySQL 与 Redis 两种服务器的Docker 安装。至于其它服务器的 Docker 安装,大家可自行查找资料。只要 MySQL 与 Redis这两类服务器学会了安装,其它服务器的安装基本也不会…...
01、MySQL-DDL(数据定义语言)
目录 1、查询 2、创建 3、修改 4、删除 1、查询 1、查询所有数据库 show databases; 2、查询当前数据库 select database(); 3、查询当前数据库中所有的表(需要先进入这个数据库) use d1; show tables; 4、查询表结构 desc users; 5、查询指定表的建…...
RT-Thread 操作系统 之 线程间同步 IO设备模型
RT-Thread 操作系统 之 线程间同步 IO设备模型 一、线程间同步1.1、信号量1.1.1、信号量结构体1.1.2、信号量的使用和管理1.1.3、信号量同步例程 1.2、互斥量1.2.1、互斥量的使用和管理 1.3、事件集1.3.1、事件集使用和管理方法1.3.2、事件集三个线程同步实例 二、IO设备模型2.…...
力扣leetcode移动0(C++)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […...
阿里云部署open-webui实现openai代理服务
一、 环境准备 1. 阿里云服务器,ubuntu22系统 2. 外网服务器,linux系统 3. openai API Key 二、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端: 🚀 Getting Started | Open WebUI 1. 如果服务器配置比较低,…...
你的工作环境,选对劳保鞋了吗?守护安全,从脚下开始!
在众多的工作场所中,我们穿梭于不同的工作环境,从繁忙的工厂车间到复杂的建筑工地,再到需要精细操作的实验室……每一步都承载着对安全的期许和对效率的追求。但你是否意识到,脚下那双不起眼的劳保鞋,其实是守护你安全…...
【Linux】编译器gcc/g++ 、程序翻译过程、动静态库
目录 1.gcc/g Linux编译器1.1. gcc与g的安装1.2. gcc与g用法1.2.1.gcc用法1.2.2. g用法 1.3. 程序翻译的过程1.3.1. 前提知识:1.3.2. 预处理(语言种类不变)条件编译用途: 1.3.3. 编译(生成汇编语言)1.3.4. …...
通义灵码-阿里云推出的AI智能编码助手
通义灵码体验地址 标题通义灵码是什么? 通义灵码是由阿里巴巴推出的基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云…...
构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用
随着5G、AI、物联网(IoT)、云计算等技术的快速发展,万物互联的时代已经到来,全新的行业生态AIoT正在引领一场深刻的变革。在这场变革中,EasyCVR视频流媒体技术以其强大的视频处理、汇聚与融合能力,在智能分…...
LeetCode Hard|【460. LFU 缓存】
力扣题目链接 LFU全称是最不经常使用算法(Least Frequently Used),LFU算法的基本思想和所有的缓存算法一样,一定时期内被访问次数最少的页,在将来被访问到的几率也是最小的。 相较于 LRU 算法,LFU 更加注重…...
积极参与全球能源科技前沿对话,海博思创推动绿色低碳发展
在能源转型与绿色低碳发展的全球浪潮中,国内领先的储能解决方案供应商海博思创以卓越的技术实力和前瞻性的战略眼光,站在了行业变革的前沿。公司不仅在国内外多个重要展会上大放异彩,更通过一系列技术创新与深度合作,为全球能源行…...
[工具]-ffmpeg-笔记
朋友有一个需求,将视频文件转化为音频文件、音频文件获取音频转化为文本文件。 思路:通过ffmpeg转化视频为音频,通过百度ai提供的voice_t_text接口提取语音文本,但是需要将音频分割成1分钟内的pcm编码 ,采样率16000的…...
Android Fragment:详解,结合真实开发场景Navigation
目录 1)Fragment是什么 2)Fragment的应用场景 3)为什么使用Fragment? 4)Fragment如何使用 5)Fragment的生命周期 6)Android开发,建议是多个activity,还是activity结合fragment&…...
JavaWeb中的Servlet
本笔记基于【尚硅谷全新JavaWeb教程,企业主流javaweb技术栈】https://www.bilibili.com/video/BV1UN411x7xe?vd_sourcea91dafe0f846ad7bd19625e392cf76d8总结 Servlet Servlet简介 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运…...
SpringBoot AOP 简单的权限校验
本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。 书接上回登录与注册功能 我们的用户表里面不是有role(权限)这个字段吗 在JWT令牌的生成中,我们加入了role字段。 那么接下来,我们就可以通过这个字段来实现权限校验。 我这里就很简单&#x…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
