多國語言程式設計之資源轉換 (轉)

worldblog發表於2007-12-02
多國語言程式設計之資源轉換 (轉)[@more@] 

湖南省公安高等專科學校內保教研室(410006) 楊霞 1. 多國語言之資源轉換問題 不同國家的人使用著不同語言的操作。在 Window s下,語言用內碼表來識別,不同語言用不同內碼表來表示,如"簡體中文"用內碼表936表示,而"美國英語"則用內碼表1252表示。 在用Visual C++開發應用時,與語種相關資訊一般在資源(*.RC檔案)中,因此,要編制不同語種應用程式(如中文應用程式、英文應用程式),實質上是要求編寫出不同語種的資原始檔。在實際程式設計中,我們可將不同語種的資原始檔編譯成相應的動態連線庫。這樣,在使用時,可根據所使用內碼表異同,選用由相應語種的資原始檔編譯而成的動態連線庫,即可使應用程式正常執行。這就是所謂的多國語言程式設計問題。 在開發中文應用程式時,常要求應用程式在中文作業系統和英文作業系統+外掛漢字平臺這兩種環境中都能正常執行。但由於工作環境不同,往往導致同一應用程式,在某種環境下能正常工作,在另一種環境下則不能正常工作。如中文版的Microsoft , 在中文作業系統下能正常執行,但在英文作業系統+外掛漢字平臺這種環境下, 顯示的就是一堆亂碼。 要解決這一問題,需為不同語種作業系統編制不同語種資原始檔, 實際上這也是多國語言程式設計問題。所不同的是,由於此時所顯示資訊並不需隨語種而變(無論在哪種環境下都只顯示中文資訊),因此,編制多個語種資原始檔可以有很簡單的方法,此即本文所要討論的資源轉換問題。該問題可簡單地描述為:如果已有了某一語種的資原始檔,在資源內容不變的情況下,如何將其轉換為另一語種的資原始檔。例如, 已有了簡體中文(內碼表為936)的資原始檔,在資源內容不變的情況下 ,如何將其轉換為美國英語(內碼表為1252)的資原始檔。 2. 如何進行資源轉換 下面以將資原始檔從內碼表936(簡體中文)轉換到內碼表1252(美國英語)為例進行說明。 容易想到但會帶來災難性後果的方法是,直接修改資源屬性。這種方法過程是將Vis ual C++的Workspace視窗切換到Re View, 選中某項資源,單擊右鍵,從彈出選單中選擇"Properties"命令,此時系統將會彈出一對話方塊。在彈出的對話方塊中,修改Language 項的值, 將其由"簡體中文"改為"美國英語"。如此對Resource View中其他各項資源進行修改,將所有資源項的Language屬性都改為"美國英語"。但是,經此種修改後,再開啟資源,會發現資源裡的內容變成了一堆不可讀的亂碼。更致命的是,即使將資源的Language項的屬性重新設為" 簡體中文",資源內容仍是不可讀的一堆亂碼。也就是說,我們根本無法恢復資源原來內容。因此,如果在修改前沒有將資源,此種修改帶來的後果將是災難性的。 正確的方法是,以某文字編輯器(如EDIT、NOTEPAD)開啟資原始檔 ,在其中查詢詞"LA NGUAGE",找到後可看到如下內容: ////////////////////////////////////////////// // Chinese (P. R. C.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936) #endif //_WIN32 這段程式碼表示當前使用的內碼表為936,所代表的語種為簡體中文。將以上程式碼段用如下程式碼段替換 ////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 以上程式碼說明資源使用內碼表為1252,所代表語種為美國英語。 經過上面簡單修改,即可將內碼表為936資原始檔轉換為內碼表為 1252的資原始檔,而資源內容不變。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987428/,如需轉載,請註明出處,否則將追究法律責任。

相關文章