Qt Quick是一個基于QML語言的用戶界面框架,旨在幫助開發(fā)人員更輕松地創(chuàng)建現(xiàn)代,流暢和高度可定制的用戶界面。它是Qt框架中的一個重要組成部分,通過將界面設(shè)計與業(yè)務邏輯分離,提高了開發(fā)效率和代碼可維護性。Qt Quick提供了豐富的組件庫和動畫效果,使得開發(fā)者可以在不需要編寫大量代碼的情況下快速構(gòu)建漂亮的用戶界面。同時,Qt Quick還支持跨平臺開發(fā),可以在多個平臺上運行,包括桌面,移動設(shè)備和嵌入式系統(tǒng)。
(資料圖片僅供參考)
以下部分描述了國際化 QML 源代碼的各個方面。如果應用程序中的所有用戶界面組件都遵循這些指南,則可以針對不同的語言和當?shù)匚幕曀祝ɡ缛掌诤蛿?shù)字的格式化方式)本地化應用程序的各個方面。
、對所有文字用戶界面字符串使用 qsTr()
QML 中的字符串可以使用 qsTr()、qsTranslate()、qsTrId()、QT_TR_NOOP()、QT_TRANSLATE_NOOP() 和 QT_TRID_NOOP() 函數(shù)標記為翻譯。標記字符串的最常用方法是使用 qsTr() 函數(shù)。例如:
Text{id: txt1;text: qsTr("Back");}
此代碼使“Back”成為翻譯文件中的關(guān)鍵條目。在運行時,翻譯系統(tǒng)查找關(guān)鍵字“Back”,然后獲取當前系統(tǒng)語言環(huán)境對應的翻譯值。結(jié)果返回到 text 屬性,用戶界面將顯示當前語言環(huán)境的“Back”的適當翻譯。
、為翻譯器添加上下文
用戶界面字符串通常很短,因此需要幫助翻譯文本的人理解文本的上下文。可以在源代碼中添加上下文信息作為要翻譯的字符串的額外描述性文本。這些額外的描述包含在交付給翻譯人員的 .ts 翻譯文件中。
.ts 文件是帶有源文本和翻譯文本位置的 XML 文件。.ts 文件可轉(zhuǎn)換為二進制翻譯文件,并作為應用程序的一部分。
Text{id: txt1;// This user interface string is only used here//: The back of the object, not the front//~ Context Not related to back-steppingtext: qsTr("Back");}
在上面代碼片段中:
//: 行上的文本是翻譯器的主要注釋。
//~ 行上的文本是可選的額外信息。文本的第一個單詞用作 .ts 文件中 XML 元素的附加標識符,因此請確保第一個單詞不是句子的一部分。例如,.ts 文件中的注釋“Context Not related to that”被轉(zhuǎn)換為“
【領(lǐng) QT開發(fā)教程 學習資料, 點擊下方鏈接莬費領(lǐng)取↓↓ ,先碼住不迷路~】
點擊這里:
、消除相同文本的歧義
翻譯系統(tǒng)將用戶界面文本字符串合并為獨特的項目。這種合并使翻譯工作的人員不必多次翻譯相同的文本。 但是,在某些情況下,文本相同但含義不同。
通過添加一些 id 文本作為 qsTr() 函數(shù)的第二個參數(shù)來區(qū)分相同的文本。
在以下代碼片段中,not front 文本是一個 id,用于區(qū)分此“Back”文本與后退“Back”文本:
Text{id: txt1;text: qsTr("Back", "not front");}
、使用 %x 將參數(shù)插入字符串
下面的代碼片段有一個帶有兩個數(shù)字參數(shù) %1 和 %2 的字符串。這些參數(shù)與 .arg() 函數(shù)一起插入。
Text{text: qsTr("File %1 of %2").arg(counter).arg(total)}
%1 指的是第一個參數(shù),%2 指的是第二個參數(shù),此代碼產(chǎn)生的輸出類似于:“File 2 of 3”。
、使用 %Lx 使數(shù)字本地化
如果在指定參數(shù)時包含 %L 修飾符,則數(shù)字將根據(jù)當前選擇的語言環(huán)境(地理區(qū)域)的數(shù)字格式約定來格式化。
Text{text: qsTr("%L1").arg(total)}
如果 total 是數(shù)字“”,英文區(qū)域設(shè)置輸出為“4,”;德文區(qū)域設(shè)置輸出為“,56”。
、國際化日期、時間和貨幣
需要查詢當前的語言環(huán)境(地理區(qū)域)并使用 Date 的方法來格式化字符串。
() 返回一個 Locale 對象,其中包含有關(guān)語言環(huán)境的各種信息。特別是, 屬性包含當前語言環(huán)境的語言和國家信息。可以對其進行解析以確定當前語言環(huán)境的適當內(nèi)容。
Text{text: qsTr("Date %1").arg(Date().toLocaleString(()))}
上面代碼段使用 Date() 獲取當前日期和時間,然后將其轉(zhuǎn)換為當前語言環(huán)境的字符串。 然后它將日期字符串插入到 %1 參數(shù)中以進行適當?shù)霓D(zhuǎn)換。
要確保貨幣數(shù)字已本地化,請使用 Number 類型。 此類型具有與 Date 類型類似的功能,用于將數(shù)字轉(zhuǎn)換為本地化的貨幣字符串。
、將 QT_TR_NOOP() 用于可翻譯的數(shù)據(jù)文本字符串
如果用戶在不重啟的情況下更改系統(tǒng)語言,根據(jù)系統(tǒng)的不同,數(shù)組和列表模型中的字符串以及其他數(shù)據(jù)結(jié)構(gòu)可能不會自動刷新。要強制在用戶界面中顯示文本時刷新文本,需要使用 QT_TR_NOOP() 宏聲明字符串。然后,當填充要顯示的對象時,需要明確檢索每個文本的翻譯。
ListModel{id: myListModel;ListElement{//: Capital city of Finlandname: QT_TR_NOOP("Helsinki");}}...Text{text: qsTr((0).name); // 獲取元素 0 中 name 屬性的翻譯}
、使用 Locale 擴展本地化功能
如果想要不同地理區(qū)域的不同圖形或音頻,可以使用 () 來獲取當前的語言環(huán)境。 然后為該語言環(huán)境選擇合適的圖形或音頻。
下面的代碼片段展示了如何選擇一個合適的圖標來代表當前語言環(huán)境的語言。
:{switch (().(0,2)){case "en":languageIcon = "../images/language-icon_";break;case "fi":languageIcon = "../images/language-icon_";break;default:languageIcon = "../images/language-icon_";}}
、為動態(tài)語言變化做好準備
可以通過使用 QCoreApplication::installTranslator() 和 QCoreApplication::removeTranslator() 添加和刪除翻譯器來更改 Qt 翻譯函數(shù)使用的語言。之后可以調(diào)用 QQmlEngine::retranslate() 來觸發(fā)所有使用翻譯的綁定的刷新。因此,用戶界面將動態(tài)切換到新選擇的語言。
或者,也可以將 QEvent::LanguageChange 事件轉(zhuǎn)發(fā)到應用程序的 QQmlEngine 實例或?qū)⒆约旱男盘栠B接到 QQmlEngine::retranslate()。
Qt Quick 應用程序使用與 Qt C++ 應用程序相同的底層本地化系統(tǒng)(lupdate、lrelease 和 .ts 文件)。
.pro 文件中的 SOURCES 變量適用于 C++ 源文件。如果在那里列出 QML 或 JavaScript 源文件,編譯器會嘗試將它們構(gòu)建為 C++ 文件。可以使用 lupdate_only{...} 條件語句,以便 lupdate 工具看到 .qml 文件,但 C++ 編譯器會忽略它們。
例如,以下 .pro 文件片段指定應用程序中的兩個 .qml 文件。
lupdate_only{SOURCES = \}
還可以使用通配符匹配來指定 .qml 源文件。搜索不是遞歸的,因此需要在源代碼中指定每個包含用戶界面字符串的目錄:
lupdate_only{SOURCES = *.qml \*.js \content/*.qml \content/*.js}
【領(lǐng) QT開發(fā)教程 學習資料, 點擊下方鏈接莬費領(lǐng)取↓↓ ,先碼住不迷路~】
點擊這里:
關(guān)鍵詞: