Struts2(十二)---消息處理與國際化

(1)如何配置國際化資源文件
I Action範圍的國際化資源文件:在Action類文件中所在的路徑建立名爲ActionName_language_country.properties的文件.
II 包範圍資源文件:在包的根路徑下建立名爲Package_language_country.properties的屬性文件,一旦建立處於該包下的所有Action都可以訪問該資源文件.注意:包範圍資源文件的baseName就是Package,不是Action所在的包名.例:
這裏寫圖片描述
III 全局資源文件
~~命名方式[baseName]_language_country.properties
~~struts.xml <!-- 配置國際化資源文件 -->
<constant name="struts.custom.i18n.resources" value="[baseName]"></constant>

IV 國際化資源文件的加載順序—>離當前Action較近的優先被加載.
V 如何在頁面上和Action類中訪問國家化資源文件的Value值
1)在Action類中,若Action類中實現了TextProvider接口,則可以調用其getText()方法獲取Value值(通過繼承ActionSupport的方式)
2)JSP頁面上訪問國際化消息:
~不帶佔位符:

<s:text name="key"/>

表單元素的 label 屬性:可替換爲 key 或使用 getText() 方法,並對其進行強制 OGNL 解析
~ 帶佔位符:
<s:text.../> 標籤中使用多個 <s:param.../> 標籤來填充消息中的佔位符。
Struts2 直接在國際化消息資源文件中通過 “${}” 使用表達式,該表達式將從值棧中獲取對應的屬性值
例:


    time=Time:{0}

    <s:text name="time">
        <s:param value="date"></s:param>
    </s:text>

    ------------------------------------

    time2=Time:${date}

    <s:text name="time2"></s:text>

(2)實現通過超鏈接切換語言
I 具體確定Locale對象的過程(可參照i18n攔截器源碼)

· Struts2使用i18n攔截器處理國際化,並且將其註冊在默認的攔截器棧中.
· i18n攔截器在執行Action方法前,自動查找請求中一個名爲request_locale的參數,如果該參數存在,攔截器將其作爲參數,轉換成Locale對象,並將其設爲 用戶默認的Locale(代表國家/語言環境).並把其設置爲session的WW_TRNS_I18n_LOCALE屬性
·若request沒有名爲request_locale的參數,則i18n攔截器會從session中獲取WW_TRNS_I18n_LOCALE的屬性值,若該值不爲空,則從該屬性值設置爲瀏覽者的默認Locale
·若session中的WW_TRNS_I18n_LOCALE的屬性值爲空,則從ActionContext中獲取Locale對象
這裏寫圖片描述
II 具體實現:只需要在超鏈接的後面附着request_locale的請求參數,值是語言國家代碼

<a href="testI18n.action?request_locale=en_US">English</a>
<a href="testI18n.action?request_locale=zh_CN">中文</a>

注:超鏈接必須是一個struts2請求,即需要i18n攔截器工作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章