偶然在網上看到一片文章,覺得很不錯,拿來。原文如下:
解決國際化問題這的確是個老話重談了,因為這裡面確實也沒有什麼可以稱的上技術含量的,只是實現起來有點煩瑣,不過我還是要寫出來,希望剛接觸這方面的同行們不至於走太多的彎路。
由於mfc應用程式也有自己的資源檔案,當你呼叫mfc函式比如 cstring::loadstring 或其它 loadicon 時,mfc應用程式框架首先跟蹤搜尋exe檔案的資源,然後才是dll和mfc的資源,因此在使用純資源dll時候,必須人為先改變資源的搜尋順序,可以通過使用 afxsetresourcehandle 函式來實現,具體實現如下:
下面開始談談具體的實現步驟。
一、建立主工程
步驟:從專案中移出所有的資源檔案,把resource面板中的所有檔案移出,把fileview面板中的multilanguage.rc,resource.h,以及resource files下的所有檔案移出。(說明:移出的檔案並不是從實際的檔案目錄中刪除掉)
二、建立英文版的dll
步驟:刪除不需要的檔案:把resource面板中的所有檔案移出,把 fileview 面板中的english.rc,resource.h,以及resource files下的所有檔案移出,然後也可以從實際目錄中刪除掉;
複製相關的資源檔案:把multilanguage目錄下的multilanguage.rc,resource.h檔案複製到english工程檔案目錄下,還需要把 multilanguage/res 下的所有檔案複製到english/res目錄下(這樣操作起來簡單,當然你可以根據需要,選擇複製的檔案);
把3步複製的所有檔案新增到專案中去;
把所有的中文的資源名修改為相關的英文資源,同時需要把支援的語言改為「english(u.s.).",把project選單 setting 對話方塊中 resource 標籤的預設文字改為"english(u.s.).」,還需要在resource標籤下刪
除預處理定義中的"_afxdll"。這樣使用者的鏈結庫包含通用的mfc資源;
然後編譯建立動態鏈結庫就ok了;
三、建立中文版的dll
具體的方法同建立英文版的dll一樣,把專案名改為chinese.只是從 project 選單中選擇 setting… 選項。然後在link標籤下"project options" 新增 "/noentry" 選項。最後,編譯並建立動態鏈結庫。
四、修改 multilanguage工程
de>private:
bool m_bchinese;
hinstance m_hlangdll; de>
建構函式中初始化:
在initinstance()函式修改資源載入順序:
別忘了exitinstance()函式釋放掉載入的dll資源
最後編譯執行! 小結
以上的方法實現了中英文軟體介面,不過,只要稍做擴充套件,很容易實現對多語言的支援。
純資源的dll檔案來實現多語言
在使用vc寫簡繁體通用程式時,對實現選單 介面 tooltips等的文字時無法實現通用。如果寫簡體和繁體各一套程式,那肯定不現實。查詢所有資料和文章都只能實現選單的多語言,且使用起來也不方便 並且無法實現介面 tooltips等的多語言。因而,採用純資源的dll檔案來實現多語言。純資源dll檔案實現...
MFC 設定多語言使用資源副本
1 選擇資源管理器,選到相應的介面或者menu,右鍵插入副本選擇想要的語言,這裡使用 英語 美國 為例 2 修改副本資源中控制項名稱 3 在相應的 前新增這個 setthreaduilanguage makelcid makelangid lang english,sublang english u...
軟體多語言
locale是指特定於某個國家或地區的一組設定,包括字符集,數字 貨幣 時間和日期的格式等。在windows中,每個locale可以用乙個32位數字表示,記作lcid。在winnt.h中可以看到lcid的組成。它的高16位表示字元的排序方法,一般為0。在它的低16位中,低10位是primary la...