2.國際化處理步驟 <1>建立資源文件 資源文件的命名規則: 默認的命名為: 文件名前綴.properties 根據語言的命名為: 文件名前綴.語言種類.properties 例如: 分別為英文(美國)、中文、默認的命名規則 Csdn_zh_CN.progperties內容: 注意:資源文件中的內容不能出現中文,所以要對中文進行轉換。 轉換: 對於中文的屬性文件,我們編寫好後,應該使用jdk提供的native2ascii命令把文件轉換為unicode編碼的文件。命令的使用方式如下: native2ascii 源文件.properties 目標文件.properties 但是 Myeclipse智能,自動轉化。 <2>在struts.xml文件中配置常量 A.當資源文件位於src路徑下: <!-- 國際化資源文件的基本名稱 csdn就是基礎名稱--> <constant name="struts.custom.i18n.resources" value="csdn"/> B.當資源文件位於包中: <!-- 國際化資源文件的基本名稱--> <constant name="struts.custom.i18n.resources" value="包名.csdn"/> <3>獲取國際化標簽 A.在jsp頁面中獲取國際化標簽 <body> 登陸頁面 <br>第一種方法(xhml); <s:form action="" namespace="/csdn"method="post" theme="xhtml"> <!-- key:指定國際化資源中的值 --> <s:textfield name="name"key="name"></s:textfield> <!-- showPassword是否顯示密碼 --> <s:password name="pass"key="pass" showPassword="true"></s:password> <!-- submit中用OGNL標簽來獲取國際化的值 OGNL標簽:%{getText("name")} --> <s:submit value="%{getText('login')}"></s:submit> </s:form> 第二種方法(simple); <s:form ation="" namespace="/csdn"method="post" theme="simple"> <!-- 獲取國際化資源中的值 --> <s:text name="name"></s:text> <s:textfield name="name"></s:textfield> <br /> <s:text name="pass"></s:text> <s:password name="pass"value="123" showPassword="true"></s:password> <br /> <!-- submit中用OGNL標簽來獲取國際化的值 OGNL標簽:%{getText("name")} --> <s:submit value="%{getText('login')}"></s:submit> </s:form> </body> B.在action中獲取國際化標簽 System.out.println(getText("nameeorr")); 采用getText("nameeorr")方法獲取 注:如果在配置文件中有點位符的情況,處理方法如下: 資源文件的內容: A.在jsp頁面中獲取占位符: <s:text name="wellcome"> <!-- 第一個值 --> <s:param> <s:property value="aa"/> </s:param> <!-- 第二個值 --> <s:param>中國java</s:param> </s:text> 效果圖: B.在action中獲取點位符: System.out.println("帶占位符:"); List<String> args= new ArrayList<String>(); args.add("ww"); args.add("坑你坑你坑死你"); System.out.println("第一種方法。。。"+getText("wellcome",args)); System.out.println("第二種方法。。。"+getText("wellcome",new String[]{"花花","小貓小狗"})); 效果圖: 3.包范圍資源文件 在一個大型應用中,整個應用有大量的內容需要實現國際化,如果我們把國際化的內容都放置在全局資源屬性文件中,顯然會導致資源文件變的過於龐大、臃腫,不便於維護,這個時候我們可以針對不同模塊,使用包范圍來組織國際化文件。 方法如下: 在java的包下放置package_language_country.properties資源文件,package為固定寫法,處於該包及子包下的action都可以訪問該資源。當查找指定key的消息時,系統會先從package資源文件查找,當找不到對應的key時,才會從常量struts.custom.i18n.resources指定的資源文件中尋找
4.action范圍資源文件: 我們也可以為某個action單獨指定資源文件,方法如下: 在Action類所在的路徑,放置ActionClassName_language_country.properties資源文件,ActionClassName為action類的簡單名稱。 當查找指定key的消息時,系統會先從ActionClassName_language_country.properties資源文件查找,如果沒有找到對應的key,然後沿著當前包往上查找基本名為package 的資源文件,一直找到最頂層包。如果還沒有找到對應的key,最後會從常量struts.custom.i18n.resources指定的資源文件中尋找。 5.JSP中直接訪問某個資源文件 利用struts2 提供i18n標簽輸出國際化信息 <!-- 固定包下的資源文件 --> <s:i18n name="www.csdn.pakage"> <s:text name="wellcome"> <s:param>李三</s:param> <s:param>www.qq.com</s:param> </s:text> </s:i18n> struts2為我們提供了<s:i18n>標簽,使用<s:i18n>標簽我們可以在類路徑下直接從某個資源文件中獲取國際化數據,而無需任何配置: <s:i18n name=“csdn"> <s:text name=“welcome”/> </s:i18n> csdn為類路徑下資源文件的基本名。 如果要訪問的資源文件在類路徑的某個包下,可以這樣訪問: <s:i18n name=“cn/csdn/action/package"> <s:text name="welcome"> <s:param>小張</s:param> </s:text> </s:i18n> 上面訪問cn.csdn.action包下基本名為package的資源文件。