傳統做法將所有資源放入動態連結庫(DLL),一種語言一個 DLL,切換語言需重啟程式。缺點在於:
本方案採用 外部文字檔案 管理多國語言:
檢查使用者選擇的語言,確定對應語言檔路徑並保存。
CString g_LoadString(CString szID);
依字串 ID 回傳對應語言內容,語言判斷邏輯封裝於函數內部。程式中僅需提供字串 ID 即可自動載入正確語言文字。
// 原始寫法
CString str;
str = "語言";
// 修改後
CString str;
str = g_LoadString("IDS_LANGUAGE");
逐一呼叫 g_LoadString 工作量過大,提供 g_SetDialogStrings(CDialog *pDlg, UINT uDlgID) 函數:
注意:靜態文字控制項預設 ID 皆為 IDC_STATIC (65535) 無法區分,需修改需變更文字之 CStatic 控制項 ID。
[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