軟件資源國(guó)際化VC++教程_第1頁(yè)
軟件資源國(guó)際化VC++教程_第2頁(yè)
軟件資源國(guó)際化VC++教程_第3頁(yè)
軟件資源國(guó)際化VC++教程_第4頁(yè)
軟件資源國(guó)際化VC++教程_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 頁(yè)共10頁(yè)KYJLA02-JS-PR03第2頁(yè)共1頁(yè)0軟件國(guó)際化VC+教程1軟件國(guó)際化概述隨著計(jì)算機(jī)應(yīng)用的普及,應(yīng)用軟件跨國(guó)使用越來(lái)越頻繁,如何實(shí)現(xiàn)應(yīng)用軟件的國(guó)際化,成為許多程序員關(guān)心的問(wèn)題。這種國(guó)際化問(wèn)題相對(duì)使用某一種語(yǔ)言的用戶來(lái)說(shuō),就是本地化問(wèn)題。本地化的含義比僅僅翻譯菜單欄和對(duì)話框的文本內(nèi)容要廣泛得多,如特定文化背景的位圖和圖標(biāo)對(duì)不同的人來(lái)說(shuō),可能會(huì)有不同的含義。在Windows系統(tǒng)中,應(yīng)用程序開發(fā)者可以通過(guò)利用VC動(dòng)態(tài)鏈接庫(kù),只用一套源代碼就能簡(jiǎn)潔地支持多種文字。本文介紹用VC的資源動(dòng)態(tài)鏈接庫(kù)解決國(guó)際化問(wèn)題的具體方法和步驟。實(shí)現(xiàn)技術(shù):利用VC編程,可以將所有的可見資源封裝在一個(gè)資源

2、動(dòng)態(tài)鏈接庫(kù)中,以簡(jiǎn)化本地化工作。一般情況下,資源包含在應(yīng)用程序中,但也可以將資源與應(yīng)用程序(即源代碼)分離的方式以確定根據(jù)語(yǔ)言需求加載不同語(yǔ)言版本的資源動(dòng)態(tài)鏈接庫(kù)DLL。當(dāng)調(diào)用MFC函數(shù)比如CString:LoadString或其它Loadicon時(shí),MFC應(yīng)用程序框架首先跟蹤搜索EXE文件的資源,然后才是DLL和MFC的資源,因此在使用純資源DLL時(shí)候,必須先人為改變資源的搜索順序,調(diào)用AfxSetResourceHandle函數(shù)完成資源的引用。HINSTANCEm_hLangDLL=:LoadLibrary(AppLanguage.dll);AfxSetResourceHandle(m_h

3、LangDLL);下面主要從兩個(gè)典型的Demo實(shí)例簡(jiǎn)要說(shuō)明軟件國(guó)際化(以中英文為例)的實(shí)現(xiàn):Demo1項(xiàng)目名:MultiLangDemol,根據(jù)調(diào)用GetSystemDefaultLangID函數(shù)判斷系統(tǒng)默認(rèn)語(yǔ)種,以載入相應(yīng)語(yǔ)言的資源動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)界面與系統(tǒng)的自動(dòng)適應(yīng)。Demo2項(xiàng)目名:MultiLangDemo2,根據(jù)界面菜單手動(dòng)選擇語(yǔ)種實(shí)現(xiàn)動(dòng)態(tài)更改語(yǔ)言資源,包括圖標(biāo)、菜單、狀態(tài)欄,以及顯示不同區(qū)域的數(shù)據(jù)格式。2實(shí)現(xiàn)步驟DEMO1一、創(chuàng)建主工程:運(yùn)行VC6.0-File-New-Prcject;選擇MFCAppWizard(exe),在右邊ProjectName下輸入項(xiàng)目名MultiLang

4、Demo1,完成(這里以SingleDocument為例,其他類似)。從項(xiàng)目中移出所有的資源文件,將FileView面板中的MultiLangDemo1.rc,Resource.h,以及ResourceFiles下的所有文件移出(不是從實(shí)際文件目錄中刪除)。注:項(xiàng)目中移出資源文件后,主工程必須要加載外部的語(yǔ)言資源DLL,如果沒(méi)有找到或加載失敗的話,程序?qū)o(wú)法運(yùn)行,所以這里也可以選擇不移出,保留程序默認(rèn)的資源(Demo1中已移出,Demo2中沒(méi)有移出)。二、創(chuàng)建中、英文語(yǔ)言版(或其他語(yǔ)言)的資源DLL注:為統(tǒng)一起見,語(yǔ)言資源DLL名以主工程名+Res的格式,不同語(yǔ)言資源以文件夾區(qū)分,如本例中中文

5、資源DLL工程(MultiLangDemo1Res)可以創(chuàng)建在主工程MultiLangDemo1下的CHS文件夾中,英文資源DLL工程(MultiLangDemo1Res)可創(chuàng)建在主工程MultiLangDemo1下的ENG文件夾中。運(yùn)行VC6.0-File-New-Project;選擇MFCAppWizard(dll),在右邊ProjectName下輸入項(xiàng)目名MultiLangDemo1Res,下一步選擇RegularDllUsingshareMFCDLL,單擊Finish完成創(chuàng)建。刪除該工程下的資源文件:將FileView面板中的MultiLangDemo1Res.rc,Resource.

6、h,以及ResourceFiles下的所有文件移出,然后也將實(shí)際目錄中的文件刪除掉。;Clas閤Resoi罵FileVieVAViiWVAOi4QWorkspaceMultiLangDemolRes:1pro-MultiLangDemolResfiles-_jSourceFiles國(guó)MultiLangDemolRes.cpp司MultiLangDemolRes.def烹|因StdAfx.cpp-_jHeaderFiles司MultiLangDemolRes.h司Resource.h-_jResourceFiles弐ReadMe.txtMultiLangDemolRes.rcStdAfx.hMu

7、ltiLangDemolRes.rc2復(fù)制相關(guān)資源文件:將MultiLangDemol目錄下的MultiLangDemol.rc,Resource.h文件復(fù)制到MultiLangDemolRes工程文件目錄下,將MultiLangDemol/res下的所有文件復(fù)制到MultiLangDemo1/res目錄下(當(dāng)然也可以根據(jù)需要,選擇復(fù)制的文件)。將第3步復(fù)制的所有文件添加到項(xiàng)目中去。!/蘭WorkspaceMultiLangDemolRes1:1pro-MultiLangDemolResfilesMultiLangDemol.rc-_JSourceFiles囲|:總MultiLangDemol

8、Res.cpp司MultiLangDemolRes.def:總StdAfx.cpp-_JHeaderFilesResource.h司MultiLangDemolRes.h罵StdAfx.hMultiLangDemol.icoMultiLangDemol.rc21MultiLangDemolDoc.icoToolbar.bmp降-_JResourceFilesISetWindowText(strTitle);別忘了ExitInstance()函數(shù)釋放掉加載的dll資源intCMultilanguageApp:ExitInstance()if(m_hLangDLL)AfxFreeLibrary(m

9、_hLangDLL);returnCWinApp:ExitInstance();最后編譯運(yùn)行!如下圖為中英文版本的實(shí)現(xiàn)界面:MulliLiiL且hnoliei-=;icn1.0建)與在第DEMDDem*iH三步1首先在中文dll和英文dll中分別增加菜單項(xiàng):語(yǔ)言(Language),下拉菜單中文(Chinese)和英文(English),下拉菜單ID分別為:ID_LANGUAGE_CHINESE、ID_LANGUAGE_ENGLISH(確保同一ID,Value值一樣)。如下圖所示:并分別添加各自的菜單響應(yīng)函數(shù)OnLanguageEnglish和OnLanguageChinese,voidCMa

10、inFrame:OnLanguageChinese()/TODO:AddyourcommandhandlercodehereSetLanguage(Chinese);voidCMainFrame:OnLanguageEnglish()/TODO:AddyourcommandhandlercodehereSetLanguage(English);2.在類CMainFrame頭文件中定義如下:private:CMenu*m_pMenuNew;enumLANGUAGESChinese,English;HINSTANCEm_hInstChinese,m_hInstEnglish;LANGUAGESm_

11、nLanguage;public:voidGetDate(CString&strDate);private:voidSetLanguage(LANGUAGESnLanguage);實(shí)現(xiàn)文件中,SetLanguage函數(shù)完成資源庫(kù)的加載:voidCMainFrame:SetLanguage(LANGUAGESnLanguage)CStringstrBuffer=_T();HINSTANCEhInst=NULL;LCIDlcid=NULL;m_nLanguage=nLanguage;switch(nLanguage)caseChinese:if(!m_hInstChinese)加載CHS文件夾下的

12、語(yǔ)言資源庫(kù)m_hInstChinese=LoadLibrary(_T(CHS/MultiLangDemo2Res.dll);/根據(jù)語(yǔ)種設(shè)置窗口標(biāo)題(CMultiLangDemo2Doc*)GetActiveDocument()-SetTitle(無(wú)標(biāo)題);hInst=m_hInstChinese;break;caseEnglish:if(!m_hInstEnglish)m_hInstEnglish=LoadLibrary(_T(ENG/MultiLangDemo2Res.dll);(CMultiLangDemo2Doc*)GetActiveDocument()-SetTitle(Untitle

13、d);hInst=m_hInstEnglish;break;if(hInst)AfxSetResourceHandle(hInst);elseAfxMessageBox(加載語(yǔ)言庫(kù)失敗);/設(shè)置菜單CMenu*pMenuCurrent=GetMenu();m_pMenuNew=newCMenu;if(pMenuCurrent-m_hMenu!=m_hMenuDefault)pMenuCurrent-DestroyMenu();deletepMenuCurrent;m_pMenuNew-LoadMenu(IDR_MAINFRAME);SetMenu(m_pMenuNew);/設(shè)置狀態(tài)欄strBu

14、ffer.LoadString(AFX_IDS_IDLEMESSAGE);/就緒IIreadym_wndStatusBar.SetPaneText(0,strBuffer);m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT);m_hAccelTable=NULL;if(!LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME)AfxMessageBox(LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME)failure);/設(shè)置位圖

15、HICONm_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);SetIcon(m_hIcon,TRUE);Invalidate();3.SetLanguage函數(shù)后,將引發(fā)重繪。voidCMultiLangDemo2View:OnPaint()CPaintDCdc(this);/devicecontextforpaintingCMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStringstrBuffer=_T();/IDS_LANG_STRING為dll資源中的字符串,注意不同dll的IDS_LANG_STRING需保持一致(僅僅字符串內(nèi)容不同)。strBuffer.LoadString(IDS_LANG_STRING);dc.TextOut(10,10,strBuffer);/GettodaysdatepFrame-GetDate(strBuffer);dc.TextOut(10,30,strBuffer);其中函數(shù)GetData函數(shù)是根據(jù)語(yǔ)種類別獲取不同的todaydate的數(shù)據(jù)格式,其實(shí)現(xiàn)詳見代碼:MultiLangDemo2。下面如圖為Demo2的界面實(shí)現(xiàn):英文資源dll中添加了IDS_STRINGTEST,但編譯器首先是搜索的主工程下的資源文件,故編譯提示沒(méi)有定義

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論