<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的java天地

    Struts2的國際化

    資源文件的命名:basename_language_country.properties

    JAVA國際化

    如果系統同時存在資源文件、類文件,系統將以類文件為主,而不會調用資源文件。

    對于簡體中文的Locale,ResourceBundle搜索資源的順序是:

    (1)baseName_zh_CN.class

    (2)baseName_zh_CN.properties

    (3)baseName_zh.class

    (4)baseName_zh.properties

    (5)baseName.class

    (6)baseName.properties

    ?

    Struts2的國際化入門

    Struts2國際化是建立在Java國際化的基礎上的,一樣是通過提供不同國家/語言環境的消息資源,然后通過ResourceBundle

    加載指定Locale對應的資源文件,再取得該資源文件中指定key對應的消息--整個過程與JAVA程序的國家化完全相同,只是

    Struts2框架對JAVA程序國際化進行了進一步封裝,從而簡化了應用程序的國際化。

    Struts2需要國際化的部分

    類型轉換:

    數據校驗:

    驗證框架xml配置文件的國際化:RegisterAction-validation.xml文件<message key="username.xml.invalid"/>

    JSP頁面的國際化:<s:text name="addUser"/>

    Action的國際化:利用ActionSupport類提供的getText()方法.

    Struts2中加載全局資源文件

    struts.xml

    <constant name="struts.custom.i18n.resources" value="baseName"/>

    struts.properties

    struts.custom.i18n.resources=baseName

    訪問國際化消息

    Struts2訪問國際化消息主要有如下三種方式:

    (1)JSP頁面:<s:text name="key"/>

    (2)Action類中:使用ActionSupport類的getText方法。

    (3)表單元素的Label里:為表單元素指定一個key屬性

    輸出帶占位符的國際化消息

    Struts2中提供了如下兩種方式來填充消息字符串中的占位符

    (1)JSP頁面,在<s:text.../>標簽中使用多個<s:param.../>標簽來填充消息中的占位符。

    (2)Action中,在調用getText方法時使用getText(String aTextName,List args)或getText(String key, String[] args)方法來填充占位符。

    除此之外,Struts2還提供了對占位符的一種替代方式,這種方式允許在國際化消息資源文件中使用表達式,對于這種方式,則可避免在使用國際化消息時還需要為占位符傳入參數值。

    如下在消息資源中使用表達式

    succTip=${username}, 歡迎, 您已經登錄!

    在上面的消息資源中,通過使用表達式,可以從ValueStack中取出該username屬性值,自動填充到該消息資源中。

    加載資源文件的方式

    (1)加載全局資源文件: <constant name="struts.custom.i18n.resources" value="baseName"/>

    (2)包范圍資源文件 :為Struts2指定包范圍資源文件的方法是,在包的根路徑下建立多個文件名為package_language_country.properties的文件,一旦建立了

    ??? 這個系列的國際化資源文件,應用中處于該包下的所有Action都可以訪問該資源文件。需要注意的是上面的包范圍資源文件的baseName就是package,

    ?不是Action所在的包名。

    (3)Action范圍資源文件:在Action類文件所在的路徑建立多個文件名為ActionName_language_country.properties的文件。

    (4)臨時指定資源文件:<s:i18n.../>標簽的name屬性指定臨時的國際化資源文件

    加載資源文件的順序

    Action中加載資源文件,假設我們在某個ChildAction中調用了getText("user.title"),Struts 2.0的將會執行以下的操作:

    (1)優先加載系統中保存在ChildAction的類文件相同位置,且baseName為ChildAction的系列資源文件。

    (2)如果在(1)中找不到指定key對應的消息,且ChildAction有父類ParentAction,則加載系統中保存在ParentAction的類文件相同位置,且

    ?? baseName為ParentAction的系列資源文件。

    (3)如果在(2)中找不到指定key對應的消息,且ChildAction有實現接口IChildAction,則加載系統中保存在IChildAction的類文件相同位置,且

    ?? baseName為IChildAction的系列資源文件。

    (4)如果在(3)中找不到指定key對應的消息,且ChildAction有實現接口ModelDriven(即使用模型驅動模式),則對于getModel()方法返回的model對象,

    ?? 重新執行第(1)步操作。

    (5)如果在(4)中找不到指定key對應的消息,則查找當前包下baseName為package的系列資源文件。

    (6)如果在(5)中找不到指定key對應的消息,則沿著當前包上溯,直到最頂層包來查找baseName為package的系列資源文件。

    (7)如果在(6)中找不到指定key對應的消息,則查找struts.custom.i18n.resources常量指定baseName的系列資源文件。

    (8)如果經過上面的步驟一直找不到key對應的消息,將直接輸出該key的字符串值。

    對于在JSP中訪問國際化消息,則簡單的多,他們又可以分為兩種形式:

    (1)對于使用<s:i18n.../>標簽作為父標簽的<s:text.../>標簽、表單標簽的形式:

    ?? a、將從<s:i18n.../>標簽指定的國際化資源文件中加載指定key對應的消息。

    ?? b、如果在a中找不到指定key對應的消息,則查找struts.custom.i18n.resources常量指定baseName的系列資源文件。

    ?? c、如果經過上面步驟一直找不到該key對應的消息,將直接輸出該key的字符串值。

    (2)如果<s:text.../>標簽、表單標簽沒有使用<s:i18n.../>標簽作為父標簽:

    ??? 直接加載struts.custom.i18n.resources常量指定baseName的系列資源文件。如果找不到該key對應的消息,將直接輸出該key的字符串值。

    ?

    允許用戶自行選擇程序語言

    Struts2國際化的運行機制

    ??? 在Struts2中,可以通過ActionContext.getContext().setLocale(Locale arg)設置用戶的默認語言。

    為了簡化設置用戶默認語言環境,Struts2提供了一個名為i18n的攔截器(Interceptor),并且將其注冊在默認的攔截器中(defaultStack)。

    ??? i18n攔截器在執行Action方法前,自動查找請求中一個名為request_locale的參數。如果該參數存在,攔截器就將其作為參數,轉換成Locale對象,

    并將其設為用戶默認的Locale(代表國家/語言環境)。

    ?除此之外,i18n攔截器還會將上面生成的Locale對象保存在用戶Session的名為WW_TRANS_I18N_LOCALE的屬性中。一旦用戶Session中存在一個名為

    WW_TRANS_I18N_LOCALE的屬性,則該屬性指定的Locale將會作為瀏覽者的默認Locale。

    <%@ page language="java" contentType="text/html; charset=GBK"%>

    <%@taglib prefix="s" uri="/struts-tags"%>

    <script. type="text/javascript">

    function langSelecter_onChanged()

    {

    ?document.getElementById("langForm").submit();

    }

    </script>

    <%-- 設置SESSION_LOCALE為用戶session中的WW_TRANS_I18N_LOCALE屬性值 --%>

    <s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>

    <%-- 使用lee.Locales創建locales實例 --%>

    <s:bean id="locales" name="lee.Locales">

    ?<%-- 為locales實例傳入current參數值,如果SESSION_LOCALE為空,則返回ValueStack中locale屬性值(即用戶瀏覽器設置的Locale) --%>

    ?<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>

    </s:bean>

    <%-- 讓用戶選擇語言的表單 --%>

    <form. action="<s:url/>" id="langForm"

    ??? style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">

    ??? <s:text name="languag"/>

    ?<s:select label="Language" list="#locales.locales" listKey="value" listValue="key"

    ??????? value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"

    ??????? name="request_locale" id="langSelecter"

    ??????? nchange="langSelecter_onChanged()" theme="simple"/>

    </form>

    在其他頁面中包含該頁面:

    <s:include value="selectlanguage.jsp"/>

    在struts.xml文件中增加Action通配符的配置:

    <?xml version="1.0" encoding="GBK"?>

    <!DOCTYPE struts PUBLIC

    ??????? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    ??????? "

    <struts>

    ?<constant name="struts.custom.i18n.resources" value="messageResource"/>

    ?<constant name="struts.i18n.encoding" value="GBK"/>

    ??? <package name="lee" extends="struts-default">

    ??<!-- 使用通配符定義Action的name -->

    ??<action name="*">

    ???<!-- 將請求轉發給/WEB-INF/jsp/路徑下同名的JSP頁面 -->

    ???<result>/WEB-INF/jsp/{1}.jsp</result>

    ??</action>

    ??? </package>

    </struts>

    posted on 2009-03-19 23:17 tobyxiong 閱讀(13618) 評論(3)  編輯  收藏 所屬分類: java

    評論

    # re: Struts2的國際化 2009-04-05 13:04 chenlin

    <B>說的好!</B>  回復  更多評論   

    # re: Struts2的國際化 2009-04-05 13:05 chenlin

    <b>ok</b>  回復  更多評論   

    # re: Struts2的國際化 2012-08-10 14:17 lin

    就是少了例子  回復  更多評論   

    <2009年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆分類(144)

    隨筆檔案(157)

    相冊

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 三年片免费高清版 | 国产成人综合亚洲AV第一页| 亚洲一区二区三区乱码在线欧洲| 99精品热线在线观看免费视频| 国产亚洲综合色就色| 丁香花在线视频观看免费 | 亚洲尹人九九大色香蕉网站 | 在线观看无码的免费网站| 成人亚洲国产va天堂| 免费黄色一级毛片| 久久亚洲精品高潮综合色a片| 日韩免费视频观看| 免费高清A级毛片在线播放| 亚洲色偷偷狠狠综合网| 久久青青草原国产精品免费| 亚洲成人在线网站| 久久精品免费一区二区| 亚洲人AV在线无码影院观看| 国产一卡二卡≡卡四卡免费乱码| 免费在线观看一区| 亚洲色欲色欲www在线丝| 少妇无码一区二区三区免费| 亚洲综合一区二区精品久久| 好大好深好猛好爽视频免费| 日韩精品无码永久免费网站| 亚洲av永久无码精品古装片| 免费看h片的网站| 久久亚洲精品无码av| 亚洲精品无码午夜福利中文字幕 | 亚洲国产精品日韩av不卡在线| 国产免费一区二区三区VR| 中国一级特黄高清免费的大片中国一级黄色片 | 免费欧洲美女牲交视频| 两个人看的www免费视频中文| 久久亚洲精品无码aⅴ大香| 成人免费无码大片a毛片软件| 四虎精品成人免费视频| 亚洲视频在线观看不卡| 国产又黄又爽又刺激的免费网址| 国产一级黄片儿免费看| 亚洲乱码一区二区三区国产精品|