The 國際化 and 本地化 對於應用程序是使應用程序適配不同語言、地區差異及目標市場技術要求的過程。
國際化需要的範圍從拼寫改變到使應用程序能以不同語言運轉,和使用不同輸入技術、字符編碼及錶示約定。
Qt 中的所有輸入控件和文本繪製方法,有為所有支持語言提供內置支持。內置字體引擎可以正確渲染,同時包含來自各種不同書寫係統字符的文本。
| 瞭解更多有關信息 | 見 |
|---|---|
| 國際化源代碼 | 編寫翻譯源代碼 |
| 配置和部署翻譯,及使用現有 Qt 模塊翻譯 | 本地化應用程序 |
| 使用 Qt 翻譯工具 | Qt Linguist 手冊 |
以下視頻展示如何國際化和本地化簡單範例應用程序:
下列類支持 Qt 應用程序的國際化。
| 根據本地整理算法比較字符串 | |
| 可以用於加速字符串整理 | |
| 在數字及其各種語言的字符串錶示之間轉換 | |
| 用於編碼和解碼文本的基類 | |
| 用於文本基於狀態的解碼器 | |
| 用於文本基於狀態的編碼器 | |
| 在文本編碼間轉換 | |
| 基於狀態的解碼器 | |
| 基於狀態的編碼器 | |
| 用於文本輸齣的國際化支持 |
見 編寫翻譯源代碼 瞭解如何在應用程序中使用類的更多有關信息。
Qt 支持大多數 語言 今天在使用。
輸入控件,譬如 Qt Quick TextInput 類型和 QLineEdit , QTextEdit ,和派生類,及顯示控件,譬如 文本 類型和 QLabel 類處理下列不同書寫係統的特殊特徵:
某些亞洲語言的書寫在單詞之間沒有空格。斷行要麼可以齣現在任何字符之後 (如:中文、日文及韓文) (有例外),要麼可以齣現在邏輯單詞邊界之後 (如:泰文)。
阿拉伯語和希伯來語從右嚮左書寫,除數字和嵌入的英文文本是從左嚮右書寫外。準確行為的定義是在 Unicode 技術附錄 #9 .
某些語言 (譬如:越南語) 廣泛使用這些標記,且某些字符可以同時擁有多個標記,以澄清發音。
在特殊上下文中,某些字符會被組閤字形形成的連字所替換。常見範例是
fl
and
fi
連字,用於美國和歐洲的書籍排版。
Qt 文本引擎 支持不同 書寫係統 工作於所有平颱,若有安裝用於渲染它們的字體。
不需要知道用於特定語言的有關書寫係統,除非想要編寫自己的文本輸入控件。在某些語言中 (譬如:阿拉伯語,或來自印度次大陸的語言),字形的寬度和形狀取決於周圍的字符。要在 C++ 代碼中考慮這,使用 QTextLayout 。編寫輸入控件還要求一些腳本知識,將要使用它們。通常,最輕鬆方式是子類化 QLineEdit or QTextEdit .
編碼與應用程序源文件和應用程序讀取 (或寫入) 的文本文件兩者相關。
QML 文檔始終以 UTF-8 格式編碼。從 Qt 6 起,8 位 UTF-8 也是 Qt C++ 中的主導編碼。
The
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 () 為文本流設置常見編碼。
若需要某些其它遺留編碼,使用 QTextCodec 類來自 Qt5Compat 模塊。
當應用程序啓動時,機器的區域設置確定瞭用於外部 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 運行的某些 OS (操作係統) 和窗口係統,僅有限支持 Unicode。可用於底層係統的支持級彆對 Qt 在這些平颱提供的支持有一定影響,盡管一般而言 Qt 應用程序不需要太擔心特定平颱的局限性。
/usr/share/locale/ja_JP.EUC
目錄,無法顯示日文文本,除非安裝日文字體且目錄完整。最佳效果,是使用來自係統供應商的完整區域設置。
| 將 Qt 和 Qt Quick APP 本地化成多種語言。 | |
| 使用 Qt Linguist 國際化 Qt 應用程序 | |
| 使用 Qt 翻譯工具:lupdate、lrelease、和 Qt Linguist | |
| 基於文本 ID 的國際化,為具有很多目標區域設置和很多要翻譯文本的大型工程提供支持 | |
| 由 Qt 翻譯工具提供的復數形式翻譯規則的摘要。 | |
| 編寫啓用應用程序本地化的源代碼。 |