(十四)struts2的国际化
生活随笔
收集整理的這篇文章主要介紹了
(十四)struts2的国际化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、國際化的概念
國際化是指web程序在運行時,根據客戶端請求的國家、語言的不同而顯示不同的界面。?
例如,如果請求來自中文客戶端,則頁面的顯示,提示信息等都是中文,如果是英文客戶端,則顯示英文信息。?
國際化的英文單詞是Internationalization,但因為單詞太長,簡稱I18N,I是第一個字母,18表示中間的字母個數,N是最后一個字母。
二、java中國際化的思路
1.必須先提供程序需要的資源文件,資源文件是很多鍵值對組成,鍵是程序使用的部分,值是頁面顯示的部分。 資源文件的命名規則:Name_language_country.properties name是資源文件的基本名,可以自由定義。language和country都必須使用java給我們提供的名稱。 2.通過類加載資源文件,然后顯示在頁面上,java程序國際化的關鍵類是ResourceBundle 它有一個靜態方法:-getBundle(String baseName,Locale locale):baseName是資源文件的基本名,我們自己定義的那個,locale代表國家/語言
三、java國際化案例
(1)創建兩個國際化資源文件
第一個文件:message_zh_CN.properties 內容:hello=您好第二個文件:message_en_US.properties 內容:hello=hello,world(2)在類中實現國際化
public class I18NDemo {public static void main(String[] args) { //根據locale加載國際化資源文件ResourceBundle bundle=ResourceBundle.getBundle("com.cad.struts2.resource.message",Locale.CHINA);//加載中文資源文件,輸出您好//ResourceBundle bundle=ResourceBundle.getBundle("com.cad.struts2.resource.message",Locale.US);//加載英文資源文件,輸出hello,worldString mess=bundle.getString("hello");System.out.println(mess);}} 完成java國際化主要是提供不同語言的資源文件,然后使用ResourceBundle來根據不同的Locale加載語言資源文件,再根據指定Key來獲取對應的字符串即可。至于在jsp頁面中顯示國際化信息,可以使用jstl標簽來完成。具體的可以百度。?
四、struts2的國際化支持
?
struts2的國際化建立在java國際化之上。一樣也是通過提供不同國家的資源文件,然后通過ResourceBundle加載指定Locale對應的資源文件,再通過指定key獲取對應的信息。 整個過程完成相同,只是struts2進行了進一步封裝,簡化了操作。?
?
五、struts2的國際化步驟
1.讓系統加載國際化資源文件,有兩種方式-自動加載:Action范圍、包范圍的國際化資源文件由系統自動加載-手動加載:JSP范圍、全局范圍的國際化資源文件,分別使用標簽,配置常量的方式來手動加載。2.輸出國際化,有兩種方式-在視圖頁面輸出國際化信息,需要使用struts2標簽庫-在Action類中輸出國際化信息,需要使用ActionSupport的getText()方法?
六、struts2中Action的國際化
(1)配置全局的國際化資源
1.創建國際化資源,和上面的一樣2.在struts.xml中配置struts.xml中配置方法:<constant name="struts.custom.i18n.resources" value="com.cad.struts2.resource.message"></constant>3.在action中通過getText方法獲取值public class I18NDemo2 extends ActionSupport {public String execute(){ String value=getText("hello"); System.out.println(value);return SUCCESS;}}(2)配置包范圍的國際化資源
包范圍的國際化資源可以被該包下的所有Action使用。包范圍的國際化資源文件的名稱為:package_language_country.properties 例如 package_zh_CN.properties 文件放在包的根路徑下。 包范圍的國際化資源不用在配置文件中配置。(3)配置Action范圍的國際化資源
Action范圍的國際化資源只能被該Action使用在Action類所在的路徑創建文件:ActionName_language_country.properties 例如:ActionDemo_zh_CN.properties
七、Action類中國際化資源的加載順序
?
1.優先加載Action范圍,當前Action類路徑下的并且名字為ActionName的國際化資源文件 2.如果上一步未找到,并且Action有父類,則加載名字為Action父類的國際化資源文件 3.如果上一步未找到,并且Action有實現的接口,則加載名字為Action接口的國際化資源文件 4.如果上一步未找到,并且該Action實現接口ModelDriven,則對于getModel()方法返回的Model對象,重新執行第一步。 5.如果上一步未找到,則查找當前包范圍的國際化資源文件 6.如果上一步未找到,則沿著當前包上溯,直到最頂層包中查找包范圍的國際化資源文件 7.如果上一步未找到,則找全局的國際化資源文件。 8.如果上述所有步驟都沒找到,則直接輸出Key。?
八、struts2視圖資源的國際化
需要用到<s:text>標簽,這個標簽如果不經過action,直接訪問頁面,則顯示全局的國際化資源如果經過action,通過結果視圖返回到頁面,則按照國際化資源的加載順序顯示,從Action類路徑下開始<body> <s:text name="hello"></s:text></body> 如果經過action,還想顯示全局的國際化資源 ,可以用以下方式 顯示指定名稱的國際化資源 //指定全局國際化資源名稱<s:i18n name="com.cad.struts2.resource.message"><s:text name="hello"></s:text></s:i18n> 如果<s:i18n> 標簽當成表單標簽的父標簽,則表單標簽的key屬性會從國際化資源文件中加載信息
?
?
轉載于:https://www.cnblogs.com/yuexiaoyun/p/9450255.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的(十四)struts2的国际化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AliOS Things 硬件抽象层(H
- 下一篇: H5 六边形消除游戏开发