本页内容

使用 Qt 进行国际化

应用程序的国际化和 本地化,是指将应用程序适应目标市场的不同语言、区域差异和技术要求的过程。

  • 国际化是指设计应用程序,使其无需进行工程更改即可适应各种语言和地区。
  • 本地化是指通过添加特定于区域设置的组件(例如日期、时间和数字格式)以及翻译文本,将国际化的应用程序适应特定区域或语言。

国际化的需求范围从拼写更改到使应用程序能够以不同的语言运行,以及使用不同的输入技术、字符编码和呈现约定。

Qt 中的所有输入控件和文本绘制方法都为所有受支持的语言提供了内置支持。内置字体引擎可以正确地同时渲染包含来自多种不同书写系统的字符的文本。

有关参见
源代码的国际化编写待翻译的源代码
配置和部署翻译,以及使用现有的 Qt 模块翻译应用程序本地化
使用 Qt 翻译工具Qt Linguist 手册

以下视频演示了如何对一个简单的示例应用程序进行国际化与本地化:

用于国际化的 Qt 类

以下类支持 Qt 应用程序的国际化。

QCollator

根据本地化的排序算法比较字符串

QCollatorSortKey

可用于加快字符串排序速度

QLocale

在各种语言中实现数字与其字符串表示形式之间的转换

QStringConverter

文本编码和解码的基类

QStringDecoder

基于状态的文本解码器

QStringEncoder

基于状态的文本编码器

QTextCodec

文本编码之间的转换

QTextDecoder

基于状态的解码器

QTextEncoder

基于状态的编码器

QTranslator

文本输出的国际化支持

有关如何在应用程序中使用这些类的更多信息,请参阅《编写待翻译源代码》。

语言和书写系统

Qt 支持当今使用的大多数languages 。

输入控件(例如Qt Quick 的TextInput 类型以及QLineEdit 、QTextEdit 及其派生类),以及显示控件(例如Text 类型和QLabel 类)均可处理不同书写系统中的以下特殊特性:

  • 换行

    某些亚洲语言在词与词之间不留空格。换行可能发生在任意字符之后(有例外情况),如中文、日语和韩语;也可能发生在逻辑词界之后,如泰语。

  • 双向书写

    阿拉伯语和希伯来语从右向左书写,但数字和嵌入的英语文本除外,这些内容从左向右书写。具体行为在《Unicode技术附录第9号》中进行了定义。

  • 非空格符号或变音符号,例如欧洲语言中的重音符号或变音符号

    某些语言(如越南语)广泛使用这些标记,且某些字符可能同时带有多个标记,以明确发音。

  • 连字

    在特定语境下,某些字符对会被一个组合字形所取代,从而形成连字。常见的例子包括在美国和欧洲书籍排版中使用的fl 和fi 连字。

Qt 的文本引擎支持多种writing systems ,只要安装了用于渲染它们的字体,这些连字在所有平台上均可正常工作。

除非您想编写自己的文本输入控件,否则无需了解特定语言所使用的书写系统。 在某些语言中,例如阿拉伯语或印度次大陆的语言,字形的宽度和形状会根据周围字符的变化而变化。要在 C++ 代码中考虑这一点,请使用QTextLayout 。编写输入控件还需要对它们将要使用的文字系统有所了解。通常,最简单的方法是继承QLineEdit 或QTextEdit 。

编码

编码既涉及应用程序源文件,也涉及应用程序读写文本文件。

源代码编码

Qt Qml 文档始终采用 UTF-8 格式编码。自 Qt 6 起,8 位UTF-8也成为 Qt C++ 中的主流编码。

lupdate 工具会从您的应用程序中提取UI字符串。该工具默认要求所有源代码均采用UTF-8编码。

然而,某些编辑器(如 Visual Studio)默认使用不同的编码。避免编码问题的一种方法是将源代码限制为 ASCII 字符集,并对包含其他字符的可翻译字符串使用转义序列,例如:

label->setText(tr("F\374r \310lise"));

QString::toUtf8() 返回 UTF-8 编码的文本,该编码在保留Unicode信息的同时,若文本完全由 ASCII 字符组成,则外观上呈现为纯 ASCII 格式。要将 Unicode 转换为本地 8 位编码,请使用QString::toLocal8Bit()。在 Unix 系统上,这等同于toUtf8() 。在 Windows 上,则使用系统当前的代码页。

若要将 UTF-8 和本地 8 位编码转换为QString ,请使用QString::fromUtf8() 和QString::fromLocal8Bit() 便捷函数。

文本输入/输出的编码

使用QTextStream::setEncoding() 设置文本流的通用编码。

如果需要其他旧版编码,请使用 Qt5Compat 模块中的QTextCodec 类。

应用程序启动时,计算机的区域设置将决定用于外部 8 位数据的 8 位编码。QTextCodec::codecForLocale() 返回一个编解码器,您可以使用它在这区域设置编码和 Unicode 之间进行转换。

应用程序有时可能需要使用默认本地 8 位编码以外的其他编码。例如,在西里尔字母 KOI8-R 区域设置(俄罗斯的事实标准区域设置)下的应用程序,可能需要以 ISO 8859-5 编码输出西里尔字母。相关代码如下:

QString string = ...; // some Unicode text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);

以下代码演示了将 ISO 8859-5 西里尔字符转换为 Unicode 的过程:

QByteArray encodedString = ...; // some ISO 8859-5 encoded text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);

有关支持的编码完整列表,请参阅QTextCodec 文档。

操作系统和窗口系统

某些 Qt 运行的操作系统和窗口系统对 Unicode 的支持有限。底层系统提供的支持程度会在一定程度上影响 Qt 在这些平台上所能提供的支持,尽管通常情况下 Qt 应用程序无需过多关注平台特有的限制。

Unix/X11

  • Qt 隐藏了基于区域设置的字体和输入法,并提供 Unicode 输入和输出功能。
  • 大多数 Unix 变体默认采用 UTF-8 等文件系统规范。所有 Qt 文件函数均支持 Unicode,但会将文件名转换为本地 8 位编码,因为这是 Unix 的惯例。
  • 文件 I/O 默认使用本地 8 位编码,Unicode 选项可在 `QTextStream` 中设置。
  • 某些较旧的 Unix 发行版对部分区域设置仅提供部分支持。例如,即使您拥有/usr/share/locale/ja_JP.EUC 目录,除非安装了日语字体且该目录结构完整,否则无法显示日语文本。为获得最佳效果,请使用系统供应商提供的完整区域设置。

Linux

  • Qt 提供全面的 Unicode 支持,包括输入法、字体、剪贴板和拖放功能。
  • 在所有现代 Linux 发行版中,文件系统均采用 UTF-8 编码。文件 I/O 默认使用 UTF-8。

Windows

  • Qt 提供全面的 Unicode 支持,包括输入法、字体、剪贴板、拖放以及文件名。
  • 文件 I/O 默认使用 Latin1,Unicode 选项位于QTextStream 中。然而,尽管这是在没有更高层协议的情况下 Unicode 标准规定的顺序,但某些 Windows 程序仍无法识别大端序的 Unicode 文本文件。

Localizing Applications

将 Qt 和Qt Quick 应用程序本地化为多种语言。

Meta strings reference

Qt 翻译系统中使用的元字符串参考指南

Qt Linguist Examples

使用Qt Linguist 实现 Qt 应用程序的国际化

Qt Linguist Manual

使用 Qt 翻译工具:lupdate、lrelease 和Qt Linguist

Text ID based translations

基于文本 ID 的国际化可为具有众多目标语言环境和大量待翻译文本的大型项目提供支持

Translation Rules for Plural Forms

Qt 翻译工具生成的复数形式翻译规则概要。

Writing Source Code for Translation

编写支持应用程序本地化的源代码。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.