Qt之國際化

2021-08-01 22:57:43 字數 2754 閱讀 1949

qt國際化屬於qt高階中的一部分,本想著放到後面來說,上節剛好介紹了qt linguist,趁熱打鐵就一起了解下。

對於絕大多數的應用程式,在剛啟動時,需要載入預設的語言(或最後一次設定的語言)。在使用的過程中,我們也不需要重啟應用程式而實現語言的動態切換。這樣的話,易用性就非常好了。

要進行多語言的切換,需要執行以下步驟:

對使用者可見的文字資訊全部使用tr()進行封裝

提供使用者可以用來切換語言的一種方法。

對於每乙個視窗部件或者對話方塊,重寫changeevent事件,當事件型別為qevent::languagechange時,翻譯文字進行重新呼叫(為了簡單我把它放在乙個單獨的函式translateui()中)。

我們來看乙個簡單的示例:主介面、設定介面,設定介面可根據選擇不同語言下拉選項實現語言的動態切換!

設定介面:setting_dialog.h

typedef enumlanguage;

q_declare_metatype(language)

設定介面:setting_dialog.cpp

language_combo_box->additem("chinese", qvariant::fromvalue(ui_zh));

language_combo_box->additem("english", qvariant::fromvalue(ui_en));

qregistermetatype("language");

connect(language_combo_box, static_cast

(&qcombobox::currentindexchanged), this, &settingdialog::onindexchanged);

void settingdialog::changeevent(qevent *event)

}void settingdialog::translateui()

void settingdialog::onindexchanged()

主介面:mainwidget.cpp

connect(setting_dialog, &settingdialog::switchlanguage, this, &mainwidget::switchlanguage);

void mainwidget::translateui()

void mainwidget::setlanguage(language current_language)

void mainwidget::settranslator(qtranslator* translator)

void mainwidget::changeevent(qevent *event)

}void mainwidget::switchlanguage(language language)

if(current_language != language)

}

main.cpp

int main(int argc, char *argv)

}qtranslator translator;

translator.load(qstring(":/qm/main_widget_") + language_suffix);

mainwidget main_widget;

main_widget.settranslator(&translator);

main_widget.setlanguage(language);

main_widget.show();

}

流程:

進入main(),首先載入預設的語言(或最後一次設定的語言),然後顯示主介面。

當開啟設定介面後,首先載入當前選擇的語言,然後通過下拉設定語言選項來進行語言切換(設定介面的switchlanguage訊號關聯到主介面的switchlanguage槽中),然後將當前的語言進行儲存。

語言切換後,首先會進入changeevent函式,判斷當事件型別為qevent::languagechange時,就會執行translateui函式進行文字重新顯示。注:

為了方便,這裡只介紹中、英文之間的切換。

在pro中新增:

translations += resource/main_widget_zh.ts \

resource/main_widget_en.ts

選擇:工具->外部->qt語言家->更新翻譯,則會生成對應的ts檔案。

使用qt linguist開啟要翻譯的ts檔案,對翻譯源進行相應語言的翻譯。

可參考:qt linguist介紹

選擇:檔案->發布,就會生成對應的qm檔案。

使用qtranslator來載入生成的qm檔案,就可以讓程式顯示指定的語言。

qtranslator translator;  

translator.load(":/qm/main_widget_zh");

Android之國際化

國際化 1.記得我在 我的第乙個android 程式,基於intent 的元件互動機制 在分析r 檔案和文章最後,有透露過這種機制的原理和好處。很大程度上,為什麼我們能如此方便的實現國際化 解析度匹配等?主要就是得益於android 中這種獨特的資源管理方式。程式設計師的 可以不直接和資源發生關係。...

Qt之國際化 多語言動態切換

1.建立語言檔案 開啟.pro檔案,加入 translations cn.ts en.ts工具 外部 qt語言家 更新翻譯 lupdate 將生成翻譯檔案cn.ts en.ts 2 編輯翻譯檔案 啟動linguist qt語言家 開啟cn.ts en.ts,然後進行編輯,主要是將源文對應的譯文填寫上...

struts2學習之 國際化

struts2的國際化按如下步驟進行 1.讓系統載入國際化資源檔案 2.輸出國際化 1.檢視頁面的國際化 在jsp頁面中指定國際化資源需要借助struts2的另乙個標籤 如果把標籤作為標籤的父標籤,則會直接載入標籤裡指定的國際化資源檔案 如果把標籤當成表單標籤的父標籤,則表單標籤的key屬性將會從國...