前段時間,因工作需要,本地化了乙個英文版本的產品。
在網上查閱了若干資料,在此進行乙個簡單的整理。
在mfc程式中,實現多國語言的方式很多,我們選擇的是使用配置檔案的方法。
在通過配置檔案方式實現多國語言功能時,主要的工作是:
1、將需要在介面上顯示的文字儲存到檔案中。
2、在使用這些資源時,不是從rc檔案中獲取,而是從檔案中載入,動態顯示。
在配置檔案中,需要儲存各個資源的id、各語言版本字串的值。需要某個資源時,通過其id查詢到資源所在節點,獲取相應語言的字串值。
有乙個問題是需要考慮的,資源的id都是uint型別的,如果在配置檔案中以uint型別的數值作為節點的id,標識乙個資源的話,不容易維護。
為解決這個問題, 我們可以借鑑.h檔案中的做法。在.h檔案中,為了易於維護,為每個uint型別的id都定義了相應的巨集,例如:#define ids_data 1001,而在rc檔案中對該資源的定義為:ids_data "data"。這樣,在程式中使用時只用ids_data來代表"data"。
在配置檔案中,可以借鑑此做法。用乙個xml檔案來定義ids_data與1001的對應關係;用另外乙個檔案來定義ids_data與"data"的對應關係。而維護資源的內容時,只需要修改資源內容的xml檔案。
mfc程式中,主要有三種資源:menu、dialog、string。要根據每種資源的特點,來設計相應的方式儲存這些資源的文字內容,便於根據資源id獲取相應的文字內容。
可以為每種資源封裝乙個公共方法,動態顯示該資源的文字內容。
對menu類的資源,可以封裝乙個公共函式,遍歷menu中的所有item,為每個item設定顯示的文字。
如何從配置檔案中獲取menu item相應的字串呢?需要根據配置檔案的結構封裝相應的方法。
在遍歷選單,設定各選單項文字內容的過程中,需要的主要方法如下。
對於popup menu,設定menu text的方法:
modifymenu(hmenu, i, mf_byposition, i, menustr);
對於string menu,設定menu text的方法:
modifymenu(hmenu, nmenuid, mf_bycommand, nmenuid, menustr);
獲取選單子選單的方法:
hmenu hsubmenu = getsubmenu(hmenu,i);
對於dialog類的資源,可以封裝乙個公共函式,遍歷dialog內的所有控制項,為每個控制項設定顯示的文字內容。當然,還要設定dialog的標題。
獲取各控制項字串的方法需要根據dialog資源配置檔案的組織方式來訂。
遍歷dialog,設定各控制項文字內容時,需要用到的主要方法如下。
設定dialog標題的方法:
::setwindowtext(hwnd,caption);
獲取dialog第乙個子控制項的方法:
hwnd hsubwnd = getwindow(hwnd,gw_child);
獲取dialog子控制項下乙個控制項的方法:
hsubwnd = getwindow(hsubwnd,gw_hwndnext);
利用以上兩個方法,可以遍歷dialog中的所有控制項。
判斷子控制項是否為window的方法:
::iswindow(hsubwnd)
通過以上判斷,可以獲知遍歷是否完成。
對於string類的資源,配置檔案結構很簡單,只需要儲存資源id和各個語言版本對應的字串值即可。
可以封裝乙個公共方法,根據id從配置檔案中獲取字串的值。
使用字串資源的方式很多,例如:錯誤提示資訊、status bar顯示資訊、tooltip等等。主要的是,根據各種使用場合,如何修改相關**,改為利用公共方法,從配置檔案中讀取字串資源。
VC 通過INI配置檔案,實現多國語言切換介面
1 針對介面控制項上的字元,為不同語言做乙個ini檔案,如 chinese.ini,english.ini2 新建乙個用於初始化介面的函式 void initlanguage int nlanguage 初始化介面語言 void clanguagetestdlg initlanguage int n...
移植多國語言
二 移植zi輸入法 1 開啟zi開關 1 檔案 make ztenc26 07b gprs.mak 修改輸入法為mmi zi input method mmi zi input methods none,mmi t9,or mmi zi 2 在mmi features.h裡面開啟相應的zi語言輸入法...
Rails多國語言
下載 zh tw.yml 到 config locale 下,就有預設的正體中文翻譯 config environment.rb 的 config.i18n.default locale zh tw 可以修改預設的語系 參考投影片 rails i18n 使用方法 i18n.t 在 view 中可以直...