Qt ts文件详解

Qt ts文件(Translation Source file:翻译源文件)是Qt框架中用于存储翻译文本和相关上下文信息的一种特定格式文件,它是Qt Linguist(语言家)工具使用的基础。Qt Linguist是Qt开发工具包中的一个应用程序,专门用于本地化和国际化Qt应用程序。

Qt ts文件的结构

Qt ts文件是基于XML格式的文本文件,用于存储翻译文本和相关的上下文信息。这种格式使得翻译人员能够清晰地看到原文、上下文和翻译内容,便于进行准确的翻译工作。

文件声明

Qt ts文件通常以XML声明开始,指定了文件的版本和编码方式。

cpp 复制代码
<?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】

子标记的类型和顺序通常遵循以下规则:

  1. 语言代码 (Language):通常是定义的两个或三个字母的代码,代表一种语言。例如,zh代表中文,en代表英文。
  2. 脚本代码 (Script):可选,定义的四个字母代码,用于表示书写系统。例如,Hans代表简体中文(汉字简化字形),Hant代表繁体中文(汉字传统字形)。
  3. 地区代码 (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 (可选):当字符串包含可变的数字部分时,可以使用此元素来提供不同数量下的翻译选项。
cpp 复制代码
<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文件举例

cpp 复制代码
<?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>
相关推荐
小短腿的代码世界15 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
小短腿的代码世界16 小时前
Qt WebEngine多进程架构与IPC通信:从Chromium多进程到Qt信号槽融合
qt·架构·系统架构
尘中远18 小时前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
初阳78520 小时前
【Qt】系统相关(3)——多线程
qt
初阳7851 天前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远2 天前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia2 天前
Qt——多线程间的互斥
开发语言·qt
尘中远2 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远2 天前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia2 天前
Qt——进程与线程的概念
qt