多國語言程式設計之資源轉換 (轉)
湖南省公安高等專科學校內保教研室(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 多國語言轉換 Excel 和 Excel 轉換為 stringAndroidExcel
- C 語言程式設計(unix) (轉)程式設計
- 多語言版vfp程式設計簡單實現 (轉)程式設計
- 閒言碎語話程式設計 (轉)程式設計
- 程式設計資源收集(轉)程式設計
- C語言 之 多執行緒程式設計C語言執行緒程式設計
- Linux下C語言程式設計(轉)LinuxC語言程式設計
- 多使用者,多語言設定(轉)
- Java 帝國之函數語言程式設計(上)Java函數程式設計
- 多程式程式設計 (轉)程式設計
- 多程式程式設計(轉)程式設計
- Go語言轉換JSON資料GoJSON
- go語言資料型別轉換Go資料型別
- ASP程式介面的多語言支援 (轉)
- 輕鬆開發多語言程式 (轉)
- C語言高效程式設計的幾招(轉)C語言程式設計
- SAP OTR語言轉換R語言
- C語言“字串-數字”之間的轉換C語言字串
- C語言程式設計之《資料輸出》C語言程式設計
- Bjarne Stroustrup:概觀C++程式設計語言 (轉)JARC++程式設計
- Linux下C語言程式設計簡介(轉)LinuxC語言程式設計
- [轉]水木社群函數語言程式設計語言版版聚手記函數程式設計
- 程式設計師的網上資源 (轉)程式設計師
- C語言---整型字串轉換C語言字串
- 使用 Go 語言進行多時區時間轉換Go
- 溫度轉換——MOOC《Python語言程式設計》第1周練習題2Python程式設計
- Coco學程式設計--《設計模式》,語言無關的好書 (轉)程式設計設計模式
- C語言高效程式設計的的四招技巧[轉]C語言程式設計
- 用C語言技術進行CGI程式設計(轉)C語言程式設計
- PHP 程式設計師轉 Go 語言的經歷分享PHP程式設計師Go
- WPF多語言支援:簡單靈活的動態切換,讓你的程式支援多國語言
- 很多語言轉換成javaScript,介紹,轉載JavaScript
- C 語言程式設計利器之 CLion程式設計
- Matlab與C語言程式的應用程式設計介面(轉)MatlabC語言程式設計
- c語言字串,數字轉換C語言字串
- iOS 多國語言本地化與App內語言切換(Swift)iOSAPPSwift
- Django高階程式設計之自定義Field實現多語言Django程式設計
- 文字語音互相轉換系統設計