基於Struts 2的Web應用國際化開發很是簡單,其中Struts 2的國際化包括以下幾部分:校驗提示信息國際化、類型轉換提示信息國際化、Action信息國際化以及JSP頁面國際化。html
第一節 JSP頁面國際化java
要實現JSP頁面國際化,首先須要添加並配置相應的國際化資源文件,而後在JSP頁面中經過指定Text標籤的name屬性爲相應的Key值從而實現國際化。JSP頁面國際化有兩種方式:一種是加載全局資源文件完成國際化,另外一種是指定臨時資源文件完成國際化;下面將分別介紹這兩種方式的國際化操做jsp
1.1 加載全局資源文件完成國際化this
在通常狀況下,能夠將國際化信息放到國際化資源文件中,而後在struts.xml文件中配置該資源文件爲全局的,這樣就能夠在JSP文件中很方便的訪問到該資源文件,從而實現JSP頁面國際化。spa
下面首先來添加一份中文資源文件jspInterResource_zh_CN.properties,其代碼以下所示:code
welcomeMessage=\u5927\u5BB6\u597D\uFF01
再添加一份英文資源文件jspInterResource_en_US.properties,其代碼以下所示:xml
welcomeMessage=Hello,everyone\!
打開struts.xml配置文件,在struts根節點下添加一個常量節點constant用來配置全局資源文件,其代碼以下所示:htm
<constant name="struts.custom.i18n.resources" value="jspInterResource"></constant>
下面這段代碼主要演示如何經過Struts 2標籤庫中的Text標籤輸出國際化信息:blog
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head><title>歡迎信息</title></head> <body> <s:text name="welcomeMessage"></s:text><!--輸出國際化資源文件!--> </body> </html>
解說:上述代碼中添加了一個<s:text>標籤,該標籤的name屬性爲"welcomeMessage",表示用來輸出國際化資源文件中Key爲"welcomeMessage"的信息。繼承
1.2 指定臨時資源文件完成國際化
前面的示例在struts.xml文件中配置全局資源文件,這樣的資源文件在每一個JSP文件中均可以使用。那如何才能使得資源文件不經過struts.xml文件配置,一樣能被JSP頁面調用呢?能夠在須要調用國際化資源文件的JSP頁面中經過<s:i18n >標籤來指定臨時資源文件,這樣就能夠經過指定Key值來找到國際化信息了。
下面這段代碼主要演示如何經過Struts 2標籤庫中的Text標籤結合i18n標籤輸出臨時資源文件中的國際化信息:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head><title>歡迎信息</title></head> <body> <s:i18n name="jspInterResource"><!--指定臨時資源文件名--> <s:text name="welcomeMessage"></s:text><!--輸出國際化資源文件!--> </s:i18n> </body> </html>
解說:上述代碼添加了一個i18n標籤,經過其name屬性來設置資源文件名,該資源文件只在i18n標籤內部纔有用,離開該標籤就沒法使用了。
1.3 爲資源文件傳遞參數
能夠在Text標籤中添加一個<s:param>標籤來來傳遞參數給資源文件。資源文件則能夠經過佔位符的形式來接受參數值。
首先修改中文資源文件jspInterResource_zh_CN.properties,爲資源文件添加佔位符,其代碼以下所示:
welcomeMessage={0}\uFF0C\u4F60\u597D\uFF01
再修改英文資源文件jspInterResource_en_US.properties,其代碼以下所示:
welcomeMessage=Hello,{0}\!
下面這段代碼主要演示如何經過Struts 2標籤庫中的param標籤來傳遞參數:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head><title>歡迎信息</title></head> <body> <s:i18n name="jspInterResource"><!--指定臨時資源文件名--> <s:text name="welcomeMessage"><!--輸出國際化資源文件!--> <s:param>James</s:param><!-- 傳遞參數 --> </s:text> </s:i18n> </body> </html>
解說:上述代碼經過<s:param>標籤傳遞參數,其參數值爲James
1.4 資源文件加載順序
前面介紹了兩種JSP完成國際化的方式,一種是經過全局資源文件,一種是經過臨時資源文件。那到底它們之間的加載順序是如何的呢?
下面來介紹資源文件加載順序,其規則以下:
(1)若是使用了<s:i18n/>指定了臨時資源文件,則先從臨時資源文件中查找指定key對應的value值。
(2)若是在臨時資源文件中沒有找到指定的key對應的value值,則查找全局資源文件中該key對應的value值。
(3)若是在全局資源文件中仍沒找到指定的key對應的value值,則直接輸出key值。
(4)若是沒有使用<s:i18n/>指定了資源文件,則直接查找全局國家化資源文件中該key對應的value值。若是沒找到指定的key對應的value值,則直接輸出key值。
第二節 Action國際化
Struts 2中的Action能夠經過指定全局資源文件、包範圍資源文件、Action範圍資源文件這三種方式實現國際化。
2.1 加載全局資源文件完成國際化
Action能夠經過加載全局資源文件的方式得到國際化信息從而完成國際化,全局文件必須存放地址在項目的WEB-INF/classes目錄下。
首先來添加一份中文資源文件GlobalInterResource_zh_ CN.properties,其代碼以下所示:
ActionMessage=\u5168\u5C40\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文資源文件GlobalInterResource_en_US.properties,其代碼以下所示:
ActionMessage=Global-WelcomeMessage
打開struts.xml配置文件,在struts根節點下添加一個常量節點constant用來配置全局資源文件,其代碼以下所示:
<constant name="struts.custom.i18n.resources" value="GlobalInterResource"></constant>
配置徹底局的資源文件,就能夠在Action中經過getText方法來取得國際化信息了,getText方法是在ActionSupport中定義的,因此要使用該方法必須首先將Action繼承ActionSupport類。
下面這段代碼主要演示如何經過ActionSupport類中的getText方法得到全局資源文件中的國際化信息:
package com.sanqing.action; import com.opensymphony.xwork2.ActionSupport; public class ShowActionMessage extends ActionSupport { private String actionMessage; //actionMessage屬性 public String getActionMessage() { //設置actionMessage屬性值 return actionMessage; } public void setActionMessage(String actionMessage) {//得到actionMessage屬性值 this.actionMessage = actionMessage; } public String execute() throws Exception { actionMessage = this.getText("ActionMessage");// 取得國際化信息 return this.SUCCESS; } }
解說:上述代碼中添加了一個actionMessage屬性,該屬性用來保存從資源文件中取得的國際化信息。
添加完Action後,須要在struts.xml中配置該Action,其配置代碼以下:
<package name="struts2" extends="struts-default"> <action name="showActionMessage" class="com.sanqing.action.ShowActionMessage"> <result name="success">/ShowActionMessage.jsp</result> </action> </package>
從配置中能夠看到成功輸出頁面爲,因此須要添加該頁面,其代碼以下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head><title>國際化信息</title></head> <body>${actionMessage}</body> </html>
解說:上述代碼使用EL表達式輸出Action中的屬性
2.2 加載包範圍資源文件完成國際化
下面來介紹包範圍資源文件,包範圍資源文件的好處在於不須要在struts.xml文件中配置。不一樣包下的Action使用不一樣的包範圍資源文件,可以很好的將資源文件進行歸類。包範圍資源文件能夠也只能被該包下的Action訪問。包範圍資源文件的命名規則爲package_語言_國家.properties,下面在com.sanqing.action包下添加中英文的包範圍資源文件。
首先來添加一份中文資源文件package_zh_CN.properties,其代碼以下所示:
ActionMessage=\u5305\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文資源文件package_en_US.properties,其代碼以下所示:
ActionMessage=Package-WelcomeMessage
2.3 加載Action範圍資源文件完成國際化
下面來介紹Action範圍資源文件,Action範圍資源文件一樣不須要在struts.xml文件中配置。Action範圍資源文件只能被所對應的Action訪問,其餘Action沒法訪問。Action範圍資源文件的命名規則爲ActionNamee_language_ country.properties,文件保存必須保存在Action同目錄下。下面將爲ShowActionMessage添加Action範圍中英文資源文件。
首先來添加一份中文資源文件ShowActionMessage_zh_CN.properties,其代碼以下所示:
ActionMessage=Action\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文資源文件ShowActionMessage_en_US.propertiess,其代碼以下所示:
ActionMessage=Action-WelcomeMessage
2.4 資源文件加載順序
假如在Action範圍資源文件、包範圍資源文件、全局資源文件中同時定義了相同的key以及value值,那麼最終Action中取得的國際化信息爲Action範圍資源文件中指定key對應的value值。
下面來看資源文件加載順序示意圖,如圖所示:
第三節 示例→實現用戶自行選擇語言環境站點