The 国际化 and 本地化 of an application are the processes of adapting the application to different languages, regional differences, and technical requirements of a target market.
The need for internationalization ranges from spelling changes to enabling the application to operate in different languages and to use different input techniques, character encoding, and presentation conventions.
All input controls and text drawing methods in Qt offer built-in support for all supported languages. The built-in font engine correctly renders text that contains characters from a variety of different writing systems at the same time.
| For more information about | 见 |
|---|---|
| Internationalizing source code | 编写翻译源代码 |
| Configuring and deploying translations, as well as using existing Qt module translations | 本地化应用程序 |
| Using the Qt translation tools | Qt Linguist 手册 |
The following video shows how to internationalize and localize a simple example application:
The following classes support internationalizing of Qt applications.
| QCollator | 根据本地整理算法比较字符串 |
| QCollatorSortKey | 可以用于加速字符串整理 |
| QLocale | 在数字及其各种语言的字符串表示之间转换 |
| QStringConverter | Base class for encoding and decoding text |
| QStringDecoder | State-based decoder for text |
| QStringEncoder | State-based encoder for text |
| QTextCodec | 在文本编码间转换 |
| QTextDecoder | 基于状态的解码器 |
| QTextEncoder | 基于状态的编码器 |
| QTranslator | 用于文本输出的国际化支持 |
见 编写翻译源代码 for more information about how to use the classes in applications.
Qt supports most 语言 in use today.
Input controls, such as the Qt Quick TextInput 类型和 QLineEdit , QTextEdit , and derived classes, as well as display controls, such as the Text 类型和 QLabel class handle the following special features of the different writing systems:
Some of the Asian languages are written without spaces between words. Line breaking can occur either after any character (with exceptions) as in Chinese, Japanese and Korean, or after logical word boundaries as in Thai.
阿拉伯语和希伯来语从右向左书写,除数字和嵌入的英文文本是从左向右书写外。准确行为的定义是在 Unicode 技术附录 #9 .
Some languages, such as Vietnamese, make extensive use of these marks and some characters can have more than one mark at the same time to clarify pronunciation.
In special contexts, some pairs of characters get replaced by a combined glyph forming a ligature. Common examples are the
fl
and
fi
ligatures used in typesetting US and European books.
Qt 文本引擎 supports different writing systems that work on all platforms if the fonts for rendering them are installed.
You do not need to know about the writing system used in a particular language, unless you want to write your own text input controls. In some languages, such as Arabic or languages from the Indian subcontinent, the width and shape of a glyph changes depending on the surrounding characters. To take this into account in C++ code, use QTextLayout 。编写输入控件还要求一些脚本知识,将要使用它们。通常,最轻松方式是子类化 QLineEdit or QTextEdit .
Encoding is relevant both for application source files and the text files that the application reads or writes.
QML documents are always encoded in UTF-8 format. Since Qt 6, 8-bit UTF-8 is the predominant encoding also in Qt C++.
The
lupdate
tool extracts UI strings from your application. It expects all source code to be encoded in UTF-8 by default.
However, some editors, such as Visual Studio, use a different encoding by default. One way to avoid encoding issues is to limit any source code to ASCII, and use escape sequences for translatable strings with other characters, for example:
label->setText(tr("F\374r \310lise"));
QString::toUtf8
() returns the text in UTF-8 encoding, which preserves
Unicode
information while looking like plain ASCII if the text is wholly ASCII. To convert Unicode to local 8-bit encoding, use
QString::toLocal8Bit
(). On Unix systems, this is equivalent to
toUtf8()
. On Windows, the system's current code page is used.
For converting from UTF-8 and local 8-bit encoding to QString ,使用 QString::fromUtf8 () 和 QString::fromLocal8Bit () convenience functions.
使用 QTextStream::setEncoding () to set common encoding for text streams.
If you need some other legacy encoding, use the QTextCodec class from the Qt5Compat module.
When an application starts, the locale of the machine determines the 8-bit encoding used for external 8-bit data. QTextCodec::codecForLocale () returns a codec that you can use to convert between this locale encoding and Unicode.
The application may occasionally require encoding other than the default local 8-bit encoding. For example, an application in a Cyrillic KOI8-R locale (the de-facto standard locale in Russia) might need to output Cyrillic in the ISO 8859-5 encoding. Code for this would be:
QString string = ...; // some Unicode text QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5"); QByteArray encodedString = codec->fromUnicode(string);
The following code demonstrates the conversion from ISO 8859-5 Cyrillic to Unicode:
QByteArray encodedString = ...; // some ISO 8859-5 encoded text QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5"); QString string = codec->toUnicode(encodedString);
For a complete list of supported encodings see the QTextCodec 文档编制。
Qt 运行的某些 OS (操作系统) 和窗口系统,仅有限支持 Unicode。可用于底层系统的支持级别对 Qt 在这些平台提供的支持有一定影响,尽管一般而言 Qt 应用程序不需要太担心特定平台的局限性。
/usr/share/locale/ja_JP.EUC
directory, you cannot display Japanese text unless you install Japanese fonts and the directory is complete. For best results, use complete locales from your system vendor.
| 本地化应用程序 | Localizing Qt and Qt Quick apps into multiple languages. |
| Qt Linguist 范例 | 使用 Qt Linguist 国际化 Qt 应用程序 |
| Qt Linguist 手册 | Using Qt translation tools: lupdate, lrelease, and Qt Linguist |
| Text ID based translations | 基于文本 ID 的国际化,为具有很多目标区域设置和很多要翻译文本的大型工程提供支持 |
| Translation Rules for Plural Forms | A summary of the translation rules for plural forms produced by Qt's translation tools. |
| 编写翻译源代码 | Writing source code that enables the localization of applications. |