程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 程序實現多國語言的動態切換解決方案

程序實現多國語言的動態切換解決方案

編輯:關於VC++

實現思想:

傳統的做法是把所有的資源都放到動態庫中,一種語言一個動態庫,程序運行的時候通過加載不同的動態庫來實現多語言功能。這樣做的缺點是不能動態切換語言,如果更換語言後必須重新啟動軟件。當然,沒有人會需要經常的切換語言玩兒,但是采用動態庫的方法,如果程序需要修改資源的話,就要更新所有的動態庫,這是一個非常枯燥而且容易出現疏漏的工作。

我的方法是把所有用到的字符串都放到文件中,一種語言一個文件,根據選擇的語言到對應的文件中去加載字符串。這樣不但可以動態切換語言,而且用戶可以根據需要自己添加新的語言。

具體實現:

1、程序啟動時檢查所選擇的語言,確定該語言文件,保存該文件路徑

2、提供一個全局函數,如 g_LoadString(CString szID),根據提供的字符串ID返回

其內容,具體是哪個語言的在函數中判斷,這樣在程序中只要提供一個字符串ID就可以自動

加載不同語言的文字了。

3、如何在程序中使用:

原來代碼:

CString str;
str = "語言";
改動後:CString str;
str = g_LoadString("IDS_LANGUAGE");
4、對話框中如何實現

如果像在程序中使用一樣,每一個字符串都要去加載一次的話,如果對話框比較多,工作量可就太大了。

所以我提供了一個函數g_SetDialogStrings(CDialog *pDlg,UINT uDlgID),每個對話框在初始化的時候調 用該函數,傳遞對話框的指針,我在函數中循環枚舉所有的子控件,逐個設置文字。這樣就可以省去很多工作

注意:由於靜態文本(CStatic)默認的ID是IDC_STATIC,值都是65535,無法區分,所以在需要改變其文字的CStatic的ID要改一改,不能用默認的

5、語言文件樣例:

中文版:

[Setting]
Language=Chinese
[String]
IDS_MENU_FILE=文件
IDS_MENU_FILE_NEW=新建(&N)
IDS_MENU_FILE_OPEN=打開(&O)
IDS_MENU_FILE_CLOSE=關閉(&C)
IDS_MENU_FILE_EXIT=退出(&E)
英文版:[Setting]
Language=English
[String]
IDS_MENU_FILE=File
IDS_MENU_FILE_NEW=&New
IDS_MENU_FILE_OPEN=&Open
IDS_MENU_FILE_CLOSE=&Close
IDS_MENU_FILE_EXIT=&Exit

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved