MFC的多國語言介面的實現 轉

2022-07-26 10:09:09 字數 3154 閱讀 2900

目前很多軟體都是要出口到多個國家,因此,為軟體提供多國語言支援就成為了乙個基本條件。為軟體提供多國語言的支援的具體實現方法有很多,但基本原理都差不多,就是實現**和語言包的獨立,**根據設定的語言選擇語言包。

其中,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....