Qt动态多语言的实现(VS2012开发)
Qt對于多語言提供了QTranslator的接口,只要在程序啟動時進(jìn)行安裝,然后動態(tài)改變QTranslator的加載即可。下面是效果圖(英文/簡體/繁體)。
選擇不同的語言,界面會隨著切換。這要如何實現(xiàn)呢?QTranslator會加載*.qm的語言檔,而該文件是從*.ts轉(zhuǎn)換而來的。所以我們首先要做的是制作*.ts檔。步驟如下
1.在項目的Resource Files的位置右擊,添加新建項,選擇.cpp類型的文件,然后將名字命名為ts的后綴,比如simplify.ts。
2.雙擊simplify.ts,在里面添加ts必要的內(nèi)容。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0"></TS> 3.右擊ts檔,選擇lupdate,更新ts檔。如下圖。4.查看ts檔。右擊ts檔->打開方式->XML(文本)編譯器->雙擊或確定。(ts檔是xml格式,選用xml編譯器,便于編輯)。內(nèi)容如下
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0"> <context><name>LanguagesDialog</name><message><source>Languages</source><translation type="unfinished"></translation></message><message><source>English</source><translation type="unfinished"></translation></message><message><source>Simplify</source><translation type="unfinished"></translation></message><message><source>Traditional</source><translation type="unfinished"></translation></message> </context> </TS> 5.編譯ts檔。代碼中使用tr轉(zhuǎn)換的字段都被提取了出來,并且存在了message字段下。message字段下的source是代碼中的源字段,translation就是轉(zhuǎn)換的內(nèi)容。我們將type="unfinished"刪除,然后添加內(nèi)容。編譯后的內(nèi)容如下。 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0"><context><name>LanguagesDialog</name><message><source>Languages</source><translation >多語言</translation></message><message><source>English</source><translation >英文</translation></message><message><source>Simplify</source><translation >簡體</translation></message><message><source>Traditional</source><translation >繁體</translation></message></context> </TS>6.繁體檔(traditional.ts)和英文檔(english.ts)按同樣的方法制作。也可直接將simpify.ts復(fù)制,然后改名。
7.生成qm檔。選中ts->右擊->lrelease.如下圖
8.查看qm檔是否生成成功。也就是說,生成了對應(yīng)的english.qm、simplify.qm、traditional.qm。如下圖
注:對于ts和qm檔的制作也可以直接使用qt的Qt Linguist工具來制作。
qm制作完成后,在代碼中要實現(xiàn)相應(yīng)的切換和調(diào)用。下面是實現(xiàn)代碼。
main.cpp
#include <QtWidgets/QApplication> #include "LanguagesDialog.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);LanguagesDialog languagesDialog;a.installTranslator(languagesDialog.qTranslator);//注意:一定要加上這一句,才能將轉(zhuǎn)換器安裝到程序中,否則語言切換會失敗。languagesDialog.show();return a.exec(); }LanguagesDialog.h #include <QtWidgets>class LanguagesDialog:public QDialog {Q_OBJECT public:LanguagesDialog();QTranslator *qTranslator; protected:void changeEvent(QEvent *);private slots:void languageChanged();private:void translateUi();QGroupBox *languages;QRadioButton *english;QRadioButton *simplify;QRadioButton *traditional;};
如果需要與操作系統(tǒng)的語言相匹配,那么可以利用QLocale::system().name()獲取系統(tǒng)的語言信息,然后載入對應(yīng)的語言檔。簡易代碼如下
int main(int argc, char *argv[]) {QApplication a(argc, argv); QTranslator translator;translator.load(QLocale::system().name());a.installTranslator(&translator);//other thing.return a.exec(); }注意:QLocale::system().name()獲取的語言信息是依據(jù)ISO_639-1和ISO_3166-1生成的,一般是語言_區(qū)域的形式,比如中文代號是zh,中國的代號是CN,所以組合出來的結(jié)果就是zh_CN。所以這就要求我們在制作i18n(國際化)和l10n(本地化)的文言檔時,最好是依照這種規(guī)范生成相應(yīng)的ts和qm檔。比如剛剛可以是zh_CN.ts和zh_CN.qm。當(dāng)然可以適當(dāng)?shù)募尤肭熬Y,以便于區(qū)分不同的程序(LanguageDialog_zh_ch)。前綴可以用translator.load(QString("LanguageDialog_")+QLocale::system().name())組合而成。
以上就是簡單的實現(xiàn)。
轉(zhuǎn)載于:https://www.cnblogs.com/sparkleDai/p/7605053.html
總結(jié)
以上是生活随笔為你收集整理的Qt动态多语言的实现(VS2012开发)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Port Forwarding Por
- 下一篇: boost random library