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

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

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

    The NoteBook of EricKong

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

    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"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <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 2012-09-01 23:16 Eric_jiang 閱讀(272) 評論(0)  編輯  收藏 所屬分類: struts2
    主站蜘蛛池模板: 免费观看美女用震蛋喷水的视频| 四虎成人精品国产永久免费无码| 亚洲人成电影青青在线播放| 久久久亚洲欧洲日产国码二区| 亚洲人成电影在在线观看网色| 亚洲欧美日韩久久精品| 一级毛片免费在线观看网站| 4444www免费看| 国产精品亚洲不卡一区二区三区| 亚洲AV无码一区二区二三区软件 | 亚洲手机中文字幕| 国产成人va亚洲电影| 欧洲人成在线免费| 日本媚薬痉挛在线观看免费| 成人亚洲性情网站WWW在线观看| 亚洲成av人片在线看片| 在线永久看片免费的视频| 区久久AAA片69亚洲| 亚洲色偷精品一区二区三区| 少妇人妻偷人精品免费视频| 日批日出水久久亚洲精品tv| 911精品国产亚洲日本美国韩国| 老司机午夜精品视频在线观看免费 | 国产成人亚洲综合| 最近国语视频在线观看免费播放| 成人a视频片在线观看免费| 亚洲va久久久噜噜噜久久天堂| 日本免费人成网ww555在线| 亚洲精品中文字幕麻豆| 一区二区三区四区免费视频| 亚洲美女激情视频| 免费视频中文字幕| 亚洲一区二区三区免费视频 | xxxxx做受大片视频免费| 国产精品亚洲片在线| 又粗又长又爽又长黄免费视频 | 天天影视色香欲综合免费| 亚洲国产区男人本色| 91情侣在线精品国产免费| 亚洲va久久久噜噜噜久久天堂 | 特级做A爰片毛片免费看无码|