目前很多軟體都是要出口到多個國家,因此,為軟體提供多國語言支援就成為了乙個基本條件。為軟體提供多國語言的支援的具體實現方法有很多,但基本原理都差不多,就是實現**和語言包的獨立,**根據設定的語言選擇語言包。
其中,mfc的資源檔案就提供了對多國不同語言的支援功能,如果使用mfc開發,直接用資源檔案自帶的多國語言支援,可以省去不少的麻煩。
下面就介紹給mfc程式新增中英文的支援,開發環境為vs2010。
1. 新建工程
新建了乙個對話方塊工程,工程名稱為multilanguages,預設語言選擇是「中文」。
2. 新增多國語言的資源
在建立工程後,工程會新增預設的資源,如主對話方塊,都是「中文」資源。現在我們需要新增相應的英文的資源檔案。
為主視窗idd_multilanguages新增英文資源的方法為:
(1) 開啟resource view視窗。
(2) 右鍵idd_multilanguages,點選彈出選單中的「insert copy」選單,如下圖所示。
(3) 彈出視窗資源複製語言選擇視窗,選擇語言為「英語(美國)」,如下圖所示。
(4) 點選ok,即完成英文版對話方塊的新增。完成新增後,idd_multilanguages就對應於兩個不同語言版本的對話方塊了,如下圖所示。
使用同樣的方法,也可以為其他資源新增多國語言版本的支援。主要需要多國版本需要支援的有對話方塊、選單和字串。
新增多國語言的資源後,要對這些資源進行不同語言的定製,根據資源對應的語言,設定對話方塊和控制項的標題等。
3. locale
程式的語言選擇跟作業系統語言(system locale)、使用者設定語言(user locale)和執行緒語言(thread locale)有關。程式執行時,是根據執行緒語言來選擇資源的。如果程式中未對執行緒語言進行設定,執行緒語言預設採用使用者設定語言。設定執行緒語言的函式是setthreadlocale。
設定執行緒語言為「中文」的**如下:
setthreadlocale(makelcid(makelangid(lang_chinese, sublang_chinese_simplified), sort_default));
設定執行緒語言為「英語(美國)」的**如下:
setthreadlocale(makelcid(makelangid(lang_english, sublang_english_us), sort_default));
4. 字串處理
程式的多國語言的支援,不僅包括介面的多國語言支援,也要包括各類字串的多國語言支援,如彈出的提示資訊。因此,在彈出提示資訊時,也要為提示資訊建立多個語言版本,並根據當前執行緒的語言來選擇不同的提示資訊。
例子:實現不同語言版本中按鈕的點選次數的統計。
(1) 在string table中分別新增中英文的ids_string_sample資源,內容如下表所示。
中文這個乙個中文提示資訊。\n點選次數:%d。
英文this is a prompt message in english.\nclick times:%d.
(2) 在主視窗控制項中新增乙個控制項button1,控制項的中文名為「提示」,英文名稱為「prompt」。為該控制項新增乙個左鍵單擊訊息響應函式,該函式的內容如下:
void cmultilanguagesdlg::onbnclickedbutton1()
中文版本彈出的提示框如下圖所示:
英文版本彈出的提示框如下圖所示:
5. 語言切換
視窗在初始化時候就匯入了資源檔案,在通過setthreadlocale更換了執行緒語言後,視窗的資源並不會更改,必須要通過**來重新裝載資源。因為視窗中存在多種與執行緒語言相關的資源,重新啟動軟體一種叫快捷的更新語言環境的方法。
例:通過選單來進行語言切換,切換語言後重啟軟體。
(1) 為程式新增中英文選單選項id_language_switch,並為該選單新增訊息響應函式,其中,m_brestartflag使用判斷關閉視窗時是否需要重啟程式的標識。**如下。
void cmultilanguagesdlg::onlanguageswitch()
else
// 把語言設定寫入配置檔案
cfile file;
file.open(_t("language.ini"), cfile::modewrite | cfile::modecreate | cfile::typebinary);
file.write(&lcidnew, sizeof(lcidnew));
file.close();
// 關閉視窗
m_brestartflag = true;
postmessage(wm_close, 0, 0);
}(2) 在關閉視窗時,重啟動該程式。即在視窗響應wm_close時,重啟程式。**如下:
void cmultilanguagesdlg::onclose()
cdialogex::onclose();
}// 判斷你是否存在配置檔案,如果存在,從配置檔案中讀取語言設定
cstring strfilename = _t("language.ini");
if (pathfileexists(strfilename))
(4) 通過點選選單來測試軟體的語言切換。
6. messagebox的問題
由於messagebox中的按鈕的語言是跟作業系統相關的,要想實現messagebox按鈕的多語言化是很有一定難度的。我現在還沒有查到好的解決方法,很多網友的建議是拋棄messagebox,自己建立對話方塊。
7. 源**
8. 相關函式和型別
getsystemdefaultlcid
getsystemdefaultlocalename
getuserdefaultlcid
getuserdefaultlocalename
setthreadlocale
getthreadlocale
makelcid
makelangid
lcidtolocalname
localnametolcid
langidfromlcid
primarylangid
lcid
langid
lang_chinese 0x04
lang_english 0x09
實現多國語言處理
using system using system.data using system.configuration using system.web using system.web.security using system.web.ui.webcontrols using system.web....
MFC多國語言 配置檔案
前段時間,因工作需要,本地化了乙個英文版本的產品。在網上查閱了若干資料,在此進行乙個簡單的整理。在mfc程式中,實現多國語言的方式很多,我們選擇的是使用配置檔案的方法。在通過配置檔案方式實現多國語言功能時,主要的工作是 1 將需要在介面上顯示的文字儲存到檔案中。2 在使用這些資源時,不是從rc檔案中...
Struts實現多國語言切換
摘要 通過下拉框裡各個語言 中文,日本語,english 的選擇,切換jsp頁面文字。tyrone1979 發表於 2005 08 26 13 27 19 1 準備資源檔案。資源檔案命名格式 filename language country.properties.中文檔名為index zh cn....