嘿嘿,本文只是試圖從純c++的角度告訴你 qt 的國際化是到底是怎麼一回事(注:本文只看乙個點,不看面)。而不會一步一步告訴你qt的國際化/本地化怎麼用(這些東西在qt manual、論壇 以及 相關書籍中介紹的夠多了)。
qt 國際化所做的就是這點東西:
至於動態翻譯:點一下選單,介面文字全改變,這在qt中是相當容易實現的東西。
其實,根本就沒有動態這回事。所謂的動態翻譯,就是我們載入了乙個新的翻譯檔案,然後將介面的文字用新的重新設定了一遍。
我們找個超簡單的c++的小例子看看,並一步一步讓它變的複雜一點點。
看乙個 hello world 的例子:
#include #include #include #define tr(x) l##xint main()
恩,編譯執行,看到結果
hello world
如何翻譯這個程式呢?
源單詞和目標單詞的對應關係,我們就叫它詞典好了。
typedef std::mapmap;map chinese;
map japanese;
map norwegian;
int create_maps()
int dummy = create_maps();
有了翻譯的內容,需要安裝一下,讓我們的程式知道翻譯內容的存在吧?
map * globalmap = 0;int main()
第乙個例子中的巨集可以丟掉了,我們寫乙個函式:
std::wstring tr(const char * text)wchar_t wcs[100];
mbstowcs(wcs, text, 99);
return std::wstring(wcs);
}
將3部分合到一塊:
#include #include #include #include #includetypedef std::mapmap;
map chinese;
map japanese;
map norwegian;
int create_maps()
int dummy = create_maps();
map * globalmap = 0;
std::wstring tr(const char * text)
wchar_t wcs[100];
mbstowcs(wcs, text, 99);
return std::wstring(wcs);
}//#define tr(x) l##x
int main()
看看執行結果:
你好 世界
qt 又做了什麼呢?
qt
我們的例子
lupdate/lrelease/...
map/map/map
生成翻譯/詞典檔案
qtranslator
globalmap
安裝翻譯檔案
tr()
使用翻譯檔案
從根本上說,qt 國際化所做的就是這點東西:
注意,tr就是乙個將 const char * 變成 qstring 的函式:
qstring qobject::tr ( const char * sourcetext,...)
對於tr,我們在qt中translate、tr關係 與中文問題有了比較詳細的討論,此處就不重複了。
點一下選單,介面文字全改變,這在qt中是相當容易實現的東西。也就是大家所說的動態翻譯。
其實,根本就沒有動態這回事。所謂的動態翻譯,就是我們載入了乙個新的翻譯檔案,然後將介面的文字用新的重新設定了一遍。
考慮我們前面的例子,稍微改改:
int main()
儘管都是用tr,但3處 welcome 的內容卻不相同,動態翻譯也就是這回事。
這也是為什麼,uic生成的** ui_***.h 中始終有:
void retranslateui(qdialog *dialog)// retranslateui
這種函式存在的原因。
當你安裝了新的翻譯檔案以後,只需要重新呼叫一遍這個函式就行了。
但你安裝新的翻譯檔案後,應用程式會給各個視窗傳送乙個事件,此時,是呼叫上述函式的最佳時機
void mainwindow::changeevent(qevent *e)}
大家對這個函式應該都不陌生,畢竟,qt creator會自動為你生成它。不管你到底用還是不用。
i18n呼叫自己引數 I18N的前後端實現
所需工具 1 vue 2 vue i18n 前期設定 1 構建兩個json語言字典,如果就中英文切換就分別構建 string en.json 和string zh.json,格式如下 2 讀取前一步驟建立的字典,並構造vuei18n元素 獲取本地語言包 非同步獲取會沒有response,需要暫時關閉...
Cakephp中如何實現i18n?
好像網上一直沒有比較詳細的中文資料來講述如何使用cakephp來實現i18n。正好昨天被逼無奈的將 中的提示中文化了一把,略有心得,簡而志之。中文化cakephp有如下幾步 在需要進行中文化的地方使用 函式,如下所示 this is the string i need to translate tr...
I18n實現多語言包
url localization 外掛程式介紹 在 rails 2.2 版本之前,rails 應用程式都是採用localization外掛程式實現應用程式的本地化,支援多語言。localization有點類似於gettext,使用很簡單的方法就可以為你的應用實現多語言支援,進而實現應用的本地化。ra...