Qt Quick是一個基于QML語言的用戶界面框架,旨在幫助開發人員更輕松地創建現代,流暢和高度可定制的用戶界面。它是Qt框架中的一個重要組成部分,通過將界面設計與業務邏輯分離,提高了開發效率和代碼可維護性。Qt Quick提供了豐富的組件庫和動畫效果,使得開發者可以在不需要編寫大量代碼的情況下快速構建漂亮的用戶界面。同時,Qt Quick還支持跨平臺開發,可以在多個平臺上運行,包括桌面,移動設備和嵌入式系統。
(資料圖片僅供參考)
以下部分描述了國際化 QML 源代碼的各個方面。如果應用程序中的所有用戶界面組件都遵循這些指南,則可以針對不同的語言和當地文化習俗(例如日期和數字的格式化方式)本地化應用程序的各個方面。
、對所有文字用戶界面字符串使用 qsTr()
QML 中的字符串可以使用 qsTr()、qsTranslate()、qsTrId()、QT_TR_NOOP()、QT_TRANSLATE_NOOP() 和 QT_TRID_NOOP() 函數標記為翻譯。標記字符串的最常用方法是使用 qsTr() 函數。例如:
Text{id: txt1;text: qsTr("Back");}此代碼使“Back”成為翻譯文件中的關鍵條目。在運行時,翻譯系統查找關鍵字“Back”,然后獲取當前系統語言環境對應的翻譯值。結果返回到 text 屬性,用戶界面將顯示當前語言環境的“Back”的適當翻譯。
、為翻譯器添加上下文
用戶界面字符串通常很短,因此需要幫助翻譯文本的人理解文本的上下文。可以在源代碼中添加上下文信息作為要翻譯的字符串的額外描述性文本。這些額外的描述包含在交付給翻譯人員的 .ts 翻譯文件中。
.ts 文件是帶有源文本和翻譯文本位置的 XML 文件。.ts 文件可轉換為二進制翻譯文件,并作為應用程序的一部分。
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”被轉換為“
【領 QT開發教程 學習資料, 點擊下方鏈接莬費領取↓↓ ,先碼住不迷路~】
點擊這里:
、消除相同文本的歧義
翻譯系統將用戶界面文本字符串合并為獨特的項目。這種合并使翻譯工作的人員不必多次翻譯相同的文本。 但是,在某些情況下,文本相同但含義不同。
通過添加一些 id 文本作為 qsTr() 函數的第二個參數來區分相同的文本。
在以下代碼片段中,not front 文本是一個 id,用于區分此“Back”文本與后退“Back”文本:
Text{id: txt1;text: qsTr("Back", "not front");}、使用 %x 將參數插入字符串
下面的代碼片段有一個帶有兩個數字參數 %1 和 %2 的字符串。這些參數與 .arg() 函數一起插入。
Text{text: qsTr("File %1 of %2").arg(counter).arg(total)}%1 指的是第一個參數,%2 指的是第二個參數,此代碼產生的輸出類似于:“File 2 of 3”。
、使用 %Lx 使數字本地化
如果在指定參數時包含 %L 修飾符,則數字將根據當前選擇的語言環境(地理區域)的數字格式約定來格式化。
Text{text: qsTr("%L1").arg(total)}如果 total 是數字“”,英文區域設置輸出為“4,”;德文區域設置輸出為“,56”。
、國際化日期、時間和貨幣
需要查詢當前的語言環境(地理區域)并使用 Date 的方法來格式化字符串。
() 返回一個 Locale 對象,其中包含有關語言環境的各種信息。特別是, 屬性包含當前語言環境的語言和國家信息。可以對其進行解析以確定當前語言環境的適當內容。
Text{text: qsTr("Date %1").arg(Date().toLocaleString(()))}上面代碼段使用 Date() 獲取當前日期和時間,然后將其轉換為當前語言環境的字符串。 然后它將日期字符串插入到 %1 參數中以進行適當的轉換。
要確保貨幣數字已本地化,請使用 Number 類型。 此類型具有與 Date 類型類似的功能,用于將數字轉換為本地化的貨幣字符串。
、將 QT_TR_NOOP() 用于可翻譯的數據文本字符串
如果用戶在不重啟的情況下更改系統語言,根據系統的不同,數組和列表模型中的字符串以及其他數據結構可能不會自動刷新。要強制在用戶界面中顯示文本時刷新文本,需要使用 QT_TR_NOOP() 宏聲明字符串。然后,當填充要顯示的對象時,需要明確檢索每個文本的翻譯。
ListModel{id: myListModel;ListElement{//: Capital city of Finlandname: QT_TR_NOOP("Helsinki");}}...Text{text: qsTr((0).name); // 獲取元素 0 中 name 屬性的翻譯}、使用 Locale 擴展本地化功能
如果想要不同地理區域的不同圖形或音頻,可以使用 () 來獲取當前的語言環境。 然后為該語言環境選擇合適的圖形或音頻。
下面的代碼片段展示了如何選擇一個合適的圖標來代表當前語言環境的語言。
:{switch (().(0,2)){case "en":languageIcon = "../images/language-icon_";break;case "fi":languageIcon = "../images/language-icon_";break;default:languageIcon = "../images/language-icon_";}}、為動態語言變化做好準備
可以通過使用 QCoreApplication::installTranslator() 和 QCoreApplication::removeTranslator() 添加和刪除翻譯器來更改 Qt 翻譯函數使用的語言。之后可以調用 QQmlEngine::retranslate() 來觸發所有使用翻譯的綁定的刷新。因此,用戶界面將動態切換到新選擇的語言。
或者,也可以將 QEvent::LanguageChange 事件轉發到應用程序的 QQmlEngine 實例或將自己的信號連接到 QQmlEngine::retranslate()。
Qt Quick 應用程序使用與 Qt C++ 應用程序相同的底層本地化系統(lupdate、lrelease 和 .ts 文件)。
.pro 文件中的 SOURCES 變量適用于 C++ 源文件。如果在那里列出 QML 或 JavaScript 源文件,編譯器會嘗試將它們構建為 C++ 文件。可以使用 lupdate_only{...} 條件語句,以便 lupdate 工具看到 .qml 文件,但 C++ 編譯器會忽略它們。
例如,以下 .pro 文件片段指定應用程序中的兩個 .qml 文件。
lupdate_only{SOURCES = \}還可以使用通配符匹配來指定 .qml 源文件。搜索不是遞歸的,因此需要在源代碼中指定每個包含用戶界面字符串的目錄:
lupdate_only{SOURCES = *.qml \*.js \content/*.qml \content/*.js}【領 QT開發教程 學習資料, 點擊下方鏈接莬費領取↓↓ ,先碼住不迷路~】
點擊這里:
關鍵詞:
進口香水重瓣百合種球_進口香水 1、進口香水需要到國家相關部門辦理注冊(備案)手續,辦理該手續需要
廣東 7 月 1 日起新規落地:支持藥品批零一體化經營-世界觀點 文 圖羊城晚報全媒體記者陳澤云7月1日起,《廣東省藥品監督管理局藥品
永贏基金范帆:關注AI賦能的消費電子投資機會 環球報資訊 消費電子行業關鍵點就在于“產品創新”,也就是供給創造需求。從上一輪
焦點關注:停息掛賬5大協商步驟 信用卡逾期被起訴了會怎樣? 停息掛賬5大協商步驟信用卡出現逾期情況之后,客戶若想辦理停息掛賬
天天觀天下!全國首艘海陸一體化智能FPSO開啟交付之路 6月26日清晨5時許,全國首艘海陸一體化智能FPSO(浮式生產儲卸油裝置)
焦點快看:「港股異動」萬科企業(02202.HK)漲4.56% 【財華社訊】萬科企業(02202 HK)截至14:25上漲4 56%,現報10 54港元,
返程途中遇險情,重慶監獄民警職工奮力施救 6月21日中午,重慶市渝州監獄一監區民警張玉寶、四監區民警李俊鋒、特