版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》電子教案重慶正大軟件學(xué)院軟件系《MVC框架程序設(shè)計(jì)》課程組重慶正大軟件職業(yè)技術(shù)學(xué)院教案(項(xiàng)目類)授課對象系別軟件系本次課學(xué)時(shí)4學(xué)時(shí)年級(jí)班次大二章節(jié)題目第1章struts國際化目的要求(含技能要求)理解程序國際化的含義和思路掌握程序國際化的前臺(tái)顯示標(biāo)簽語法、后臺(tái)屬性文件及配置的編寫本節(jié)重點(diǎn)掌握程序國際化的前臺(tái)顯示標(biāo)簽語法、后臺(tái)屬性文件及配置的編寫本節(jié)難點(diǎn)理解程序國際化的含義和思路教學(xué)方法項(xiàng)目教學(xué)法教學(xué)用具機(jī)房、屏幕廣播問題引入通過用戶注冊案例,從而引出本次課程。難點(diǎn)與重點(diǎn)講解方法引導(dǎo)、分析、講解、實(shí)作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實(shí)訓(xùn)作業(yè))完成本次課的課堂任務(wù)填寫實(shí)驗(yàn)報(bào)告任務(wù)介紹(5分鐘)對注冊功能進(jìn)行國際化:當(dāng)操作系統(tǒng)默認(rèn)語言是中文的時(shí)候,頁面和驗(yàn)證消息的內(nèi)容顯示中文,如圖1.5-1。當(dāng)操作系統(tǒng)的默認(rèn)語言是英文的時(shí)候,顯示英文,如圖1.5-2。圖1.5-1中文狀態(tài)下圖1.5-2英文狀態(tài)下任務(wù)解析(50-60分鐘)Struts2中加載全局資源文件創(chuàng)建不用語言的資源文件對注冊功能模塊進(jìn)行國際化詳細(xì)步驟Struts2中加載全局資源文件struts2提供了很多加載國際化資源文件的方式,最簡單,最常用的就是加載全局的國際化資源文件,加載全局的國際化資源文件的方式通過配置常量來實(shí)現(xiàn)。不管在struts.xml還是perties文件中配置,只需要配置struts.custom.i18n.resources常量即可。配置struts.custom.i18n.resources常量時(shí),該常量的值為全局國際化資源文件的baseName。一旦指定了全局的國際化資源文件,即可實(shí)現(xiàn)程序的國際化。在struts.xml文件中加載全局資源文件的關(guān)鍵代碼如下:<!--國際化--><constantname="struts.custom.i18n.resources"value="message"></constant>說明:這段代碼。其中message就是上面的baseName。通過這種方式加載國際化資源文件后,Struts2應(yīng)用就可以在所有地方取出這些國際化資源文件了,包括JSP頁面和ACTION以及驗(yàn)證文件等。創(chuàng)建不同語言的資源文件根據(jù)國際化資源文件的命名規(guī)則,在工程的src根目錄下創(chuàng)建名字為message的兩個(gè)資源文件message_zh_CN.properties和message_en_US.properties(一個(gè)用來儲(chǔ)中文,一個(gè)用來儲(chǔ)英文)。如圖1.5-3所示。圖1.5-3資源文件存放位置注冊功能的國際化步驟1:國際化注冊頁面(regist.jsp)為了在JSP頁面中輸出國際化消息,可以使用struts2的<s:text…/>標(biāo)簽,該標(biāo)簽可以指定一個(gè)name屬性,該屬性指定了國際化資源文件中的key.(關(guān)鍵代碼如下)<html><head> <title><s:textname="title"></s:text></title><sx:head/></head><body> <center><s:textname="title"></s:text></center> ……</body></html>為了在該表單元素的Label里輸出國際化信息,可以為該表單標(biāo)簽指定一個(gè)key屬性,該key指定了國際化資源文件中的key。關(guān)鍵代碼如下:<s:formaction="register.action"> <s:textfieldname="name"key="name"></s:textfield> <s:textfieldname="username"key="username"></s:textfield> <s:passwordname="pass"key="pass"></s:password> <s:passwordname="repass"key="repass"></s:password> <s:radiolist="#{'1':getText('male'),'0':getText('female')}"value="1"key="sex"name="sex"></s:radio> <s:selectname="province"list="#{'0':getText('chongqing'),'1':getText('beijing'),'3':getText('shanghai'),'0':getText('tianjin')}"key="province"></s:select> <s:textfieldname="age"key="age"></s:textfield> <sx:datetimepickername="birth"displayFormat="yyyy-MM-dd" key="brith"accesskey="false"></sx:datetimepicker> <s:checkboxlistname="love"key="love"list="#{'0':getText('swim'),'1':getText('walk'),'2':getText('playtabletennis'),'3':getText('reading'),'4':getText('others')}"></s:checkboxlist> <s:textfieldname="mobile"key="mobile"></s:textfield> <s:textfieldname="email"key="email"></s:textfield> <s:submitkey="submit"></s:submit></s:form>步驟2:國際化驗(yàn)證文件通過上一章的學(xué)習(xí),我們知道在struts2的框架驗(yàn)證文件里有一個(gè)顯示錯(cuò)誤信息的子元素<message…/>,該元素有一個(gè)屬性key,此處的key指定了國際化資源文件中的key。關(guān)鍵代碼如下:<validators><!--每一個(gè)field就是設(shè)定"某個(gè)輸入值"的"某種規(guī)則"的校驗(yàn),name指定哪個(gè)輸入值--> <!--會(huì)員登錄名驗(yàn)證--> <fieldname="name"> <!--會(huì)員登錄名必須輸入驗(yàn)證--> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="validate_name_null"></message> </field-validator> <!--會(huì)員登錄名長度驗(yàn)證--> <field-validatortype="stringlength"> <paramname="minLength">6</param> <paramname="maxLength">18</param> <messagekey="validate_name_scope"></message> </field-validator> </field> <!--密碼驗(yàn)證--> <fieldname="pass"> <!--密碼必須輸入驗(yàn)證--> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="validate_pass_null"></message> </field-validator> <!--正則表達(dá)式驗(yàn)證密碼長度和類型--> <field-validatortype="regex"> <paramname="expression"><![CDATA[(\w{6,12})]]></param> <messagekey="validate_pass_scope"></message> </field-validator> </field> <!--確認(rèn)密碼驗(yàn)證--> <fieldname="repass"> <!--確認(rèn)密碼必須輸入驗(yàn)證--> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="validate_repass_null"></message> </field-validator> <!--字段表達(dá)式驗(yàn)證確認(rèn)密碼和密碼是否相等--> <field-validatortype="fieldexpression"> <paramname="expression"><![CDATA[pass==repass]]></param> <messagekey="validate_repass_scope"></message> </field-validator> </field> <!--年齡范圍驗(yàn)證--> <fieldname="age"> <field-validatortype="int"> <paramname="min">1</param> <paramname="max">150</param> <messagekey="validate_age_scope"></message> </field-validator> </field> <!--生日日期驗(yàn)證--> <fieldname="birth"> <field-validatortype="date"> <paramname="min">1900-01-01</param> <paramname="max">2050-01-01</param> <messagekey="validate_birth_scope"></message> </field-validator> </field> <!--電子郵件地址驗(yàn)證--> <fieldname="email"> <field-validatortype="email"> <messagekey="validate_email_scope"></message> </field-validator> </field></validators>步驟3:編寫兩個(gè)國際化資源文件的內(nèi)容第一個(gè)國際化資源文件message_en_US.properties。關(guān)鍵代碼如下:title=USERREGISTname=membernameusername=realnamepass=inputpasswordrepass=confirmpasswordsex=sexprovince=provinceage=agebirth=birthlove=lovemobile=mobileemail=emailsubmit=submitmale=malefemale=femalechongqing=chongqingbeijing=beijingshanghai=shanghaitianjin=tianjinswim=swimwalk=walkplaytabletennis=playtabletennisreading=readingothers=othersvalidate_name_null=pleaseinputmembernamevalidate_name_scope=membernamemustbebetween6and18validate_pass_null=pleaseinputpasswordvalidate_pass_scope=passwordmustbebetween6and12andonlyusednumberorlettervalidate_repass_null=pleaseinputconfirmpasswordvalidate_repass_scope=twopasswordsmustbesamevalidate_age_scope=agemustbebetween${min}and${max}validate_birth_scope=birthdaymustbebetween${min}and${max}validate_email_scope=emailisinvalid第二個(gè)國際化資源文件message_zh_CN.properties。關(guān)鍵代碼如下:title=\u7528\u6237\u6CE8\u518Cname=\u4F1Ausername=\u771F\u5B9E\u59D3\u540Dpass=\u8F93\u5165\u5BC6\u7801repass=\u786E\u8BA4\u5BC6\u7801sex=\u6027\u522Bprovince=\u7701\u4EFDage=\u5E74\u9F84birth=\u751F\u65E5love=\u7231\u597Dmobile=\u624B\u673Aemail=\u7535\u5B50\u90AE\u7BB1submit=\u63D0\u4EA4male=\u7537female=\u5973chongqing=\u91CD\u5E86beijing=\u5317\u4EACshanghai=\u4E0A\u6D77tianjin=\u5929\u6D25swim=\u6E38\u6CF3walk=\u5F92\u6B65playtabletennis=\u6253\u4E52\u4E53reading=\u770B\u4E66others=\u5176\u4ED6validate_name_null=\u8BF7\u8F93\u5165\u4F1Avalidate_name_scope=\u4F1A\u5458\u767B\u9646\u540D\u5FC5\u987B\u5728${minLength}~${maxLength}\u4F4D\u4E4B\u95Fvalidate_pass_null=\u8BF7\u8F93\u5165\u5BC6\u7801validate_pass_scope=\u5BC6\u7801\u57286\u523012\u4F4D\u4E4B\u95F4\u4E14\u53EA\u80FD\u4E3A\u5B57\u6BCD\u6216\u6570\u5B57validate_repass_null=\u8BF7\u8F93\u5165\u786E\u8BA4\u5BC6\u7801validate_repass_scope=\u4E24\u6B21\u8F93\u5165\u5BC6\u7801\u4E0D\u4E00\u81F4validate_age_scope=\u5E74\u9F84\u5FC5\u987B\u5728${min}\u5230${max}\u5C81\u4E4B\u95F4validate_birth_scope=\u751F\u65E5\u5FC5\u987B\u5728${min}\u5230${max}\u4E4B\u95F4validate_email_scope=\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u65E0\u6548根據(jù)任務(wù)提出問題(45-55分鐘)國際化是什么?國際化如何實(shí)現(xiàn)?問題解析(45-55分鐘)國際化是什么?國際化是指應(yīng)用程序運(yùn)行時(shí),可根據(jù)客戶端請求來自的國家/地區(qū),語言的不同而顯示不同的界面。例如,如果請求來自于中文操作系統(tǒng)的客戶端,則應(yīng)用程序中的各種提示信息,錯(cuò)誤和幫助等都使用中文文字;如果客戶端使用英文操作系統(tǒng),則應(yīng)用程序能自動(dòng)識(shí)別,并做出英文的響應(yīng)。當(dāng)一個(gè)應(yīng)用需要在全球范圍使用時(shí),就必須考慮在不同的地域和語言環(huán)境下的使用情況,最簡單的要求就是用戶界面上的信息可以用本地化語言來顯示。當(dāng)然,一個(gè)優(yōu)秀的全球化軟件產(chǎn)品,對國際化和本地化的要求遠(yuǎn)遠(yuǎn)不止于此,甚至還包括用戶提交數(shù)據(jù)的國際化和本地化。Java語言內(nèi)核基于Unicode2.1,提供了對不同國家和不同語言文字的內(nèi)部支持。因此,由于先天的原因,JAVA對于國際化的支持遠(yuǎn)比C\C++優(yōu)越。引入國際化的目的是為了提供自適應(yīng),更友好的用戶界面,而并未改變程序的邏輯功能。國際化的英文單詞是Internationlization,但因?yàn)檫@個(gè)單詞太長了,有時(shí)也簡稱I18N,其中I是這個(gè)單詞的第一個(gè)字母,18表示這個(gè)單詞的長度,而N代表這個(gè)單詞的最后一個(gè)字母。一個(gè)國家化支持很好的應(yīng)用,會(huì)隨著在不同區(qū)域使用時(shí),呈現(xiàn)出本地語言的提示。因此,有時(shí)候這個(gè)過程也被稱為Localization,即本地化。類似于國際化可以稱為I18N,本地化也可以稱為L10N。全球化的Internet需要全球化的軟件。全球化軟件,意味著同一種版本的產(chǎn)品能夠容易地使用于不同地區(qū)的市場。就開發(fā)者所關(guān)心的,軟件的全球化意味著國際化和本地化。JAVA語言“一次編寫,隨處運(yùn)行“,它已經(jīng)具有國際化和本地化的特征和API了。盡管JAVA開發(fā)工具為國際化和本地化的工作提供了一些基本的類,但還是有一些對于JAVA應(yīng)用程序的本地化和國際化來說較困難的工作,例如:消息獲取,編碼轉(zhuǎn)換,顯示布局和數(shù)字等。如果僅用手工來完成國際化和本地化的工作,這些工作將花費(fèi)大量的時(shí)候和資源,JAVA國際化和本地化是一個(gè)加快JAVA應(yīng)用程序國際化和本地化開發(fā)的工具集,它將大大減少國際化和本地化開發(fā)所消耗的時(shí)間和資源。國際化如何實(shí)現(xiàn)?國際化實(shí)現(xiàn)的思路將界面中顯示給用戶的一些常量文字信息提取出來,根據(jù)語言的不同編寫到專門的文本文件中,每種語言單獨(dú)存放到一個(gè)文件中(這里的文件我們稱之為資源文件,資源文件是鍵-值(key-value)對,每個(gè)資源文件中的key是不變的,但value則隨不同國家\語言變化)。程序運(yùn)行時(shí)根據(jù)用戶訪問的瀏覽器的語言設(shè)置去選擇對應(yīng)語言的資源文件,讀取文件中的鍵-值(key-value)對,根據(jù)key,將對應(yīng)的value獲取出來顯示到頁面的恰當(dāng)位置。編寫資源文件首先,資源文件的命名格式是:baseName_language_perties。說明:baseName是資源文件的基本名,用戶可以自由定義。后綴名必須是.properties。而language(語言代碼)和country(國家代碼)都不可隨意變化,必須是java所支持的語言和國家。國家代碼的取值:比如中國是CN,美國是US;語言代碼的取值:中文簡體是zh,英文是en。語言和國家代碼是可選的,代碼來源請參考以下網(wǎng)址:語言代碼:/unicode/onlinedat/languages.html國家代碼:/unicode/onlinedat/countries.html或者運(yùn)行一個(gè)java程序LocaleList.java查看輸出的代碼,LocaleList.java源代碼如下:publicclassLocaleList{publicstaticvoidmain(String[]args){Locale[]localeList=Locale.getAvailableLocales();for(inti=0;i<localeList.length;i++){ System.out.println(localeList[i].getDisplayCountry()+"="+localeList[i].getCountry()+""+localeList[i].getDisplayLanguage()+"="+localeList[i].getLanguage());}}}注:運(yùn)行LocaleList.java,將在控制臺(tái)輸出java所支持的所有語言及國家代碼。其次:資源文件內(nèi)容編寫的格式為:key=value(鍵=值的形式),例如為登陸頁面進(jìn)行中文和英文的資源文件編寫:英文的資源文件內(nèi)容:username=usernamepass=passwordlogin=submit中文的資源文件內(nèi)容username=用戶名pass=密碼login=登錄說明:其中的key是等號(hào)左邊的內(nèi)容,各種語言的資源文件的key都是一樣的,value是等號(hào)右邊的內(nèi)容,每種語言的文字是不同的。不同語言的內(nèi)容要分開存放,例子里邊英文的存放一個(gè)文件,中文的存放到另一文件中,若還有其他語言,每種語言單獨(dú)存放一個(gè)文件。注意:對于非西歐文字的資源文件,若按照上面的代碼原樣編寫下來,再運(yùn)行時(shí)會(huì)出現(xiàn)亂碼,建議使用eclipse進(jìn)行編輯,eclipse(高版本的)會(huì)自動(dòng)進(jìn)行編碼轉(zhuǎn)換(轉(zhuǎn)換為UTF-8編碼),轉(zhuǎn)換之后就不會(huì)有亂碼了,若在記事本中編輯,則須使用native2ascii進(jìn)行編碼轉(zhuǎn)換。native2ascii這個(gè)工具在java安裝目錄下bin目錄中有,轉(zhuǎn)換命令為:native2ascii-encodingUTF-8源資源文件名目的資源文件名最后,保存路徑:一般在工程的src目錄下。在struts配置文件中注冊資源文件需要在struts.xml文件的<struts>...</struts>中的開頭位置配置兩個(gè)常量。一是指定資源文件名字:<constantname=“struts.custom.i18n.resources”value=“名字前綴"/>二是指定編碼格式,比如支持中文的UFT-8:<constantname="struts.i18n.encoding"value=“UTF-8"/>在頁面應(yīng)用中實(shí)現(xiàn)國際化在頁面讀取國際化信息有三種方式:方式一:使用s:text標(biāo)簽<s:textname="title"></s:text>說明:這里的title是資源文件中的key,這個(gè)標(biāo)簽將在頁面顯示資源文件中key的值。方式二:在頁面表單中的各個(gè)輸入標(biāo)簽中加入key屬性<s:textfieldname="username"key="username"></s:textfield>說明:會(huì)在該輸入框前面顯示資源文件中的key后面的值。方式三:使用getText()表達(dá)式getText('資源文件中的key')該表達(dá)式通常在單/復(fù)選框/下拉/列表框的list屬性中使用,比如性別單選框的男女選項(xiàng):未實(shí)現(xiàn)國際化的代碼:<s:radioname=“sex”list=“#{‘0’:’男‘,’1‘:‘實(shí)現(xiàn)國際化的代碼:<s:radioname=“sex"list="#{'0':getText(‘key1'),'1':getText(‘key2')}"></s:radio>上述代碼中使用getText(‘key1’)獲得資源文件中對應(yīng)key1的值。下面通過例子1.5-1來說明國際化的具體應(yīng)用?!纠?.5-1】HelloWorld的國際化實(shí)現(xiàn)。假設(shè)在頁面上顯示一個(gè)字符串,“HelloWorld”?,F(xiàn)在要求輸出的字符串根據(jù)語言環(huán)境的不同,在中文環(huán)境下顯示“你好!”,在英文環(huán)境下顯示“HelloWorld!”,那么該如何處理?首先,加如下兩個(gè)資源文件到工程的src目錄中:第一個(gè)文件:mess_zh_CN.properties,該文件的內(nèi)容為:hello=你好!注:對于非西歐文字的資源文件,建議使用eclipse進(jìn)行編輯,eclipse(高版本的)會(huì)自動(dòng)進(jìn)行編碼轉(zhuǎn)換(轉(zhuǎn)換為UTF-8編碼),轉(zhuǎn)換之后就不會(huì)有亂碼了,若在記事本中編輯,則須使用native2ascii進(jìn)行編碼轉(zhuǎn)換,切記。當(dāng)然,若直接用UTP-8編碼進(jìn)行編輯就不用轉(zhuǎn)換,前提是需要知道每一個(gè)非西歐文字的UTF-8編碼。第二個(gè)文件:mess_en_US.properties,該文件的內(nèi)容為:hello=HelloWorld!其次,修改struts的配置文件,在struts.xml文件的<struts>...</struts>中的開頭位置配置兩個(gè)常量。關(guān)鍵代碼為:<constantname=“struts.custom.i18n.resources”value=“mess"/><constantname="struts.i18n.encoding"value=“UTF-8"/>注:該配置只需要配置一次,無需重復(fù)配置再次,在頁面中使用s:text標(biāo)簽顯示helloworld信息。關(guān)鍵代碼如下:<s:textname="hello"></s:text>最后,發(fā)布程序,在瀏覽器中運(yùn)行頁面,切
溫馨提示
- 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年軟件許可使用規(guī)范合同版
- 2024年種子買賣合同范本:高效農(nóng)業(yè)專用一
- 2024排水工程水質(zhì)改善工程承包合同范本3篇
- 2025年度物聯(lián)網(wǎng)技術(shù)應(yīng)用合同補(bǔ)充協(xié)議
- 2024無錫市房地產(chǎn)拍賣合同樣本3篇
- 2024影院線上線下活動(dòng)策劃與執(zhí)行合同3篇
- 2025版金融公司出納會(huì)計(jì)職位聘用合同文本2篇
- 2024圖書教育培訓(xùn)與銷售合作合同范本3篇
- 2025年外墻清洗項(xiàng)目合同風(fēng)險(xiǎn)評(píng)估與應(yīng)對策略范本3篇
- 2024清潔生產(chǎn)技術(shù)培訓(xùn)與市場推廣服務(wù)合同2篇
- 煤泥綜合利用的可行性研究報(bào)告
- 四川省自貢市2022-2023學(xué)年八年級(jí)上學(xué)期期末語文試題
- 變曲率雙向可調(diào)收縫式翻升模板施工工法
- 教你炒紅爐火版00纏論大概
- 消防管道施工合同
- 大學(xué)生計(jì)算與信息化素養(yǎng)-北京林業(yè)大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 2023年中國社會(huì)科學(xué)院外國文學(xué)研究所專業(yè)技術(shù)人員招聘3人(共500題含答案解析)筆試歷年難、易錯(cuò)考點(diǎn)試題含答案附詳解
- 2023年國開大學(xué)期末考復(fù)習(xí)題-3987《Web開發(fā)基礎(chǔ)》
- 《駱駝祥子》1-24章每章練習(xí)題及答案
- 《伊利乳業(yè)集團(tuán)盈利能力研究》文獻(xiàn)綜述3000字
- 減鹽防控高血壓培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論