Qt Linguist是Qt应用开发框架附带的一款图形化翻译工具,用于把Qt程序界面中用户可见的文本翻译成不同语言。它以翻译源文件(TS文件)为工作对象,向翻译人员提供上下文、开发人员注释、短语复用与校验等辅助功能,是Qt国际化与本地化流程中面向翻译环节的组件。翻译完成的TS文件由lrelease编译为供应用程序在运行时加载的QM文件。
定义
Qt Linguist是Qt开发框架提供的翻译工具,用途是翻译Qt应用程序中的字符串[1]。其工作对象是翻译源文件(TS文件),这类文件是可读的XML文本,记录源语言短语及其译文,通常由命令行工具lupdate生成和更新[2]。
该工具引入了翻译“上下文”的概念,即把屏幕上同时出现的一组短语(例如同一个菜单或对话框中的文本)归为一组,以便翻译人员分辨相同词语在不同位置的含义[3]。除标准的TS格式外,Qt Linguist还与lupdate一同支持XML本地化交换文件格式(XLIFF),目前支持1.1和1.2两个版本[4][2]。
原理
Qt的本地化建立在“函数调用时查表”的机制上。源代码中用户可见的字符串通过翻译函数调用标记,每个QObject实例都提供tr()函数,非QObject类可以使用QCoreApplication.translate()[5]。lupdate扫描C++源文件、头文件、Java、Python、QML和UI文件,找出这些可翻译字符串并写入TS文件[6]。
完整的工具链按固定顺序循环运行。lupdate生成的TS文件交给翻译人员,翻译人员用Qt Linguist填入译文;应用程序代码更新后再次运行lupdate,把新增文本并入TS文件,已有译文被保留;发布前运行lrelease读取TS文件并生成运行时使用的QM文件[7]。QM是紧凑的二进制格式,为译文提供极快的查询速度[6]。
源字符串中的编号参数在运行时被替换,如%1、%2分别对应第一、第二个值,译文中的参数顺序可以与原文不同,但参数本身必须齐全[2]。与编号参数相伴的是复数形式:许多语言的文本形态随数值变化,需要一种以上的译文,若开发者正确标记了源文本,Qt Linguist会在翻译区域为每种可能的复数形式提供输入框[2]。
翻译文件的文件名遵循appname_language[_country].ts的约定,其中language是小写的ISO 639语言代码,country是大写的ISO 3166两位国家代码;若打开文件时未显式设置目标语言和国家,Qt Linguist会尝试从文件名推断[2]。这一命名约定同时服务于运行时按当前区域自动加载对应译文[2]。
发展历程
2000年10月25日,Trolltech以BSD许可证发布了Qt Linguist的预览版本,将其定位为应用程序翻译系统,可在Unicode及目标平台支持的任何语言之间转换Qt程序的可见文本[8]。此后该工具一直作为Qt工具集的组成部分随框架分发[9]。
Qt 4系列期间,工具链与文件格式均有扩充。TS文件新增了extracomment、translatorcomment、extra-*、oldsource、oldcomment等XML元素;命令行侧增加了格式转换工具lconvert,可在TS、QM、PO、POT、QPH、XLIFF等格式之间转换[10]。lupdate在此时期也增加了-disable-heuristic、-no-sort、-target-language、-source-language、-locations等选项,并支持UTF-16编码的源文件[10]。
Qt 4.5前后,Qt Linguist开始支持在同一窗口中同时打开并编辑多个语言的翻译文件,翻译区域按语言分列显示;同时源代码显示区域可以直接预览Qt Designer的表单,取代了此前的独立预览工具[10]。到Qt 6时期,除随Qt SDK发布的版本外,官方还单独提供仅含Qt Linguist的Windows安装程序[1]。
应用
Qt Linguist处在Qt本地化流程中面向人工翻译的环节。发布管理人员用lupdate从QML和C++源文件生成一组TS文件并交给翻译人员,翻译人员在Qt Linguist中完成译文后把TS文件交回,再由lrelease生成可供应用程序使用的QM文件[6]。这一循环在应用程序持续演进的过程中反复执行,以保留已有译文并识别新增字符串[6]。
在界面层面,工具主窗口包含上下文/标签视图、字符串视图、源代码与表单视图、翻译区域、短语与猜测视图以及警告视图;翻译区域始终可见,其余视图可通过“视图”菜单或快捷键显示、隐藏和拖动重排[6]。翻译人员可以在字符串列表中标记译文为已接受,未完成的条目会被单独标识[6]。
为减少重复劳动,Qt Linguist提供短语手册机制。短语手册是可读的XML文件,收录标准短语及其译文和可选说明,通常按语言和应用族各建一份,可跨多个项目复用[6]。批量翻译功能可依据短语手册自动填充源文本的译文[6]。
该工具被若干开源项目用于界面翻译。例如VirtualBox的国际化文档即以Qt Linguist作为翻译工具,要求译者使用4.x版本的Qt Linguist处理TS文件,并明确不接受Qt 3版本生成的语言文件,因为其格式与Qt 4不兼容[9]。Qt Creator集成开发环境也集成了Qt Linguist[11]。
局限
Qt Linguist本身只处理翻译环节,不负责提取字符串或生成运行时文件,这两步分别依赖lupdate和lrelease[6]。对于标准的Qt项目,lrelease只纳入被标记为“完成”的译文,未完成的条目在运行时仍使用原文[6]。
TS文件与源代码之间存在同步依赖。如果源代码上下文显示的行号有误,说明翻译文件与源文件已经不同步,需要重新运行lupdate[6]。当lupdate改动了某个字符串的内容,其接受状态会退回为未接受[6]。
对于基于文本ID的翻译,Qt Linguist按标签而非上下文分组条目;标签只用于改善译者导航,不影响查找和唯一性,ID本身仍是全局唯一的[6]。此外,标签机制不适用于Python翻译,因为Python只支持基于文本的翻译方式,不支持基于ID的翻译[6]。
翻译质量无法由工具自动保证。工具提供的校验仅覆盖若干形式层面的检查:助记符(&符号)数量是否一致、源文本与译文的首尾空白是否一致、结尾标点是否一致、%1、%2等占位标记是否一致[6]。这些检查不判断译文的语义是否准确,未通过校验的译文仍可被接受,只是状态标记为“已接受/有警告”[6]。
参见
-
Qt —— Qt Linguist所服务的应用程序开发框架,本工具随其工具集分发。
-
国际化与本地化 —— Qt Linguist所处的软件工程技术领域,涉及文本提取、翻译与运行时加载。
-
Gettext —— 另一套广泛使用的本地化工具链,其PO、POT格式可由lconvert与Qt格式互转。
-
QObject —— Qt中提供tr()函数、构成翻译上下文基础的基类。
-
Qt Creator —— 集成了Qt Linguist的Qt集成开发环境。
参考资料
- Translators [引用日期2026-10-14]
- Übersetzen von Zeichenketten [引用日期2026-10-14]
- linguist-qt4(1) — qt4-dev-tools — Debian buster [引用日期2026-10-14]
- Qt Linguist 手册 [引用日期2026-10-14]
- Translating Applications# [引用日期2026-10-14]
- linguist-manual_8qdoc_source [引用日期2026-10-14]
- 创建翻译文件 [引用日期2026-10-14]
- Trolltech releases localization tool [引用日期2026-10-14]
- Changes between Version 32 and Version 33 of Translating [引用日期2026-10-14]
- 第5回 Qt Linguistの進化 | gihyo.jp - 第5回Qt Linguistの進化 [引用日期2026-10-14]
- E-COM-NET [引用日期2026-10-14]