




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第 頁共10頁KYJLA02-JS-PR03第2頁共1頁0軟件國際化VC+教程1軟件國際化概述隨著計(jì)算機(jī)應(yīng)用的普及,應(yīng)用軟件跨國使用越來越頻繁,如何實(shí)現(xiàn)應(yīng)用軟件的國際化,成為許多程序員關(guān)心的問題。這種國際化問題相對使用某一種語言的用戶來說,就是本地化問題。本地化的含義比僅僅翻譯菜單欄和對話框的文本內(nèi)容要廣泛得多,如特定文化背景的位圖和圖標(biāo)對不同的人來說,可能會(huì)有不同的含義。在Windows系統(tǒng)中,應(yīng)用程序開發(fā)者可以通過利用VC動(dòng)態(tài)鏈接庫,只用一套源代碼就能簡潔地支持多種文字。本文介紹用VC的資源動(dòng)態(tài)鏈接庫解決國際化問題的具體方法和步驟。實(shí)現(xiàn)技術(shù):利用VC編程,可以將所有的可見資源封裝在一個(gè)資源
2、動(dòng)態(tài)鏈接庫中,以簡化本地化工作。一般情況下,資源包含在應(yīng)用程序中,但也可以將資源與應(yīng)用程序(即源代碼)分離的方式以確定根據(jù)語言需求加載不同語言版本的資源動(dòng)態(tài)鏈接庫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í)例簡要說明軟件國際化(以中英文為例)的實(shí)現(xiàn):Demo1項(xiàng)目名:MultiLangDemol,根據(jù)調(diào)用GetSystemDefaultLangID函數(shù)判斷系統(tǒng)默認(rèn)語種,以載入相應(yīng)語言的資源動(dòng)態(tài)鏈接庫實(shí)現(xiàn)界面與系統(tǒng)的自動(dòng)適應(yīng)。Demo2項(xiàng)目名:MultiLangDemo2,根據(jù)界面菜單手動(dòng)選擇語種實(shí)現(xiàn)動(dòng)態(tài)更改語言資源,包括圖標(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)目中移出資源文件后,主工程必須要加載外部的語言資源DLL,如果沒有找到或加載失敗的話,程序?qū)o法運(yùn)行,所以這里也可以選擇不移出,保留程序默認(rèn)的資源(Demo1中已移出,Demo2中沒有移出)。二、創(chuàng)建中、英文語言版(或其他語言)的資源DLL注:為統(tǒng)一起見,語言資源DLL名以主工程名+Res的格式,不同語言資源以文件夾區(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國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):語言(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ù)完成資源庫的加載:voidCMainFrame:SetLanguage(LANGUAGESnLanguage)CStringstrBuffer=_T();HINSTANCEhInst=NULL;LCIDlcid=NULL;m_nLanguage=nLanguage;switch(nLanguage)caseChinese:if(!m_hInstChinese)加載CHS文件夾下的
12、語言資源庫m_hInstChinese=LoadLibrary(_T(CHS/MultiLangDemo2Res.dll);/根據(jù)語種設(shè)置窗口標(biāo)題(CMultiLangDemo2Doc*)GetActiveDocument()-SetTitle(無標(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(加載語言庫失敗);/設(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ù)語種類別獲取不同的todaydate的數(shù)據(jù)格式,其實(shí)現(xiàn)詳見代碼:MultiLangDemo2。下面如圖為Demo2的界面實(shí)現(xiàn):英文資源dll中添加了IDS_STRINGTEST,但編譯器首先是搜索的主工程下的資源文件,故編譯提示沒有定義
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安檢員工服務(wù)規(guī)范
- 2024年監(jiān)理工程師備考心得試題及答案
- 班級合作項(xiàng)目的有效模式計(jì)劃
- 美術(shù)教師課堂管理技巧分享計(jì)劃
- 建立學(xué)習(xí)型組織的步驟與總結(jié)計(jì)劃
- 保險(xiǎn)行業(yè)安全風(fēng)險(xiǎn)防控指南計(jì)劃
- 多元文化教育實(shí)施計(jì)劃
- 2024年特許另類投資考試優(yōu)化復(fù)習(xí)試題及答案
- 利用大數(shù)據(jù)優(yōu)化財(cái)務(wù)決策計(jì)劃
- 適應(yīng)行業(yè)變化的靈活策略計(jì)劃
- 《少先隊(duì)員采茶歌》課件
- 新外研版高一英語必修二unit6課文
- 氣排球比賽積分表
- 20道瑞幸咖啡營運(yùn)經(jīng)理崗位常見面試問題含HR常問問題考察點(diǎn)及參考回答
- 教師調(diào)課申請表
- 急性心力衰竭中國急診管理指南2022
- 《利用導(dǎo)數(shù)研究函數(shù)的零點(diǎn)問題》教學(xué)設(shè)計(jì)
- 茶室設(shè)計(jì)-課件
- 安全生產(chǎn)重大事故隱患排查報(bào)告表
- 管道系統(tǒng)吹洗(掃)記錄(壓縮空氣)
- 建設(shè)單位甲方對監(jiān)理單位考核管理辦法
評論
0/150
提交評論