国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Struts2的國際化和訪問資源文件的幾種方式
Struts2的國際化和訪問資源文件的幾種方式
2009-01-15 12:55

資源文件的命名:basename_language_country.properties

JAVA國際化
如果系統(tǒng)同時存在資源文件、類文件,系統(tǒng)將以類文件為主,而不會調(diào)用資源文件。
對于簡體中文的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國際化的基礎上的,一樣是通過提供不同國家/語言環(huán)境的消息資源,然后通過ResourceBundle
加載指定Locale對應的資源文件,再取得該資源文件中指定key對應的消息--整個過程與JAVA程序的國家化完全相同,只是
Struts2框架對JAVA程序國際化進行了進一步封裝,從而簡化了應用程序的國際化。


Struts2需要國際化的部分
類型轉(zhuǎn)換:
數(shù)據(jù)校驗:
驗證框架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中,在調(diào)用getText方法時使用getText(String aTextName,List args)或getText(String key, String[] args)方法來填充占位符。
除此之外,Struts2還提供了對占位符的一種替代方式,這種方式允許在國際化消息資源文件中使用表達式,對于這種方式,則可避免在使用國際化消息時還需要為占位符傳入?yún)?shù)值。
如下在消息資源中使用表達式
succTip=${username}, 歡迎, 您已經(jīng)登錄!
在上面的消息資源中,通過使用表達式,可以從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中調(diào)用了getText("user.title"),Struts 2.0的將會執(zhí)行以下的操作:
(1)優(yōu)先加載系統(tǒng)中保存在ChildAction的類文件相同位置,且baseName為ChildAction的系列資源文件。
(2)如果在(1)中找不到指定key對應的消息,且ChildAction有父類ParentAction,則加載系統(tǒng)中保存在ParentAction的類文件相同位置,且
   baseName為ParentAction的系列資源文件。
(3)如果在(2)中找不到指定key對應的消息,且ChildAction有實現(xiàn)接口IChildAction,則加載系統(tǒng)中保存在IChildAction的類文件相同位置,且
   baseName為IChildAction的系列資源文件。
(4)如果在(3)中找不到指定key對應的消息,且ChildAction有實現(xiàn)接口ModelDriven(即使用模型驅(qū)動模式),則對于getModel()方法返回的model對象,
   重新執(zhí)行第(1)步操作。
(5)如果在(4)中找不到指定key對應的消息,則查找當前包下baseName為package的系列資源文件。
(6)如果在(5)中找不到指定key對應的消息,則沿著當前包上溯,直到最頂層包來查找baseName為package的系列資源文件。
(7)如果在(6)中找不到指定key對應的消息,則查找struts.custom.i18n.resources常量指定baseName的系列資源文件。
(8)如果經(jīng)過上面的步驟一直找不到key對應的消息,將直接輸出該key的字符串值。

對于在JSP中訪問國際化消息,則簡單的多,他們又可以分為兩種形式:
(1)對于使用<s:i18n.../>標簽作為父標簽的<s:text.../>標簽、表單標簽的形式:
   a、將從<s:i18n.../>標簽指定的國際化資源文件中加載指定key對應的消息。
   b、如果在a中找不到指定key對應的消息,則查找struts.custom.i18n.resources常量指定baseName的系列資源文件。
   c、如果經(jīng)過上面步驟一直找不到該key對應的消息,將直接輸出該key的字符串值。
(2)如果<s:text.../>標簽、表單標簽沒有使用<s:i18n.../>標簽作為父標簽:
    直接加載struts.custom.i18n.resources常量指定baseName的系列資源文件。如果找不到該key對應的消息,將直接輸出該key的字符串值。


允許用戶自行選擇程序語言
Struts2國際化的運行機制
    在Struts2中,可以通過ActionContext.getContext().setLocale(Locale arg)設置用戶的默認語言。
為了簡化設置用戶默認語言環(huán)境,Struts2提供了一個名為i18n的攔截器(Interceptor),并且將其注冊在默認的攔截器中(defaultStack)。
    i18n攔截器在執(zhí)行Action方法前,自動查找請求中一個名為request_locale的參數(shù)。如果該參數(shù)存在,攔截器就將其作為參數(shù),轉(zhuǎn)換成Locale對象,
并將其設為用戶默認的Locale(代表國家/語言環(huán)境)。
除此之外,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創(chuàng)建locales實例 --%>
<s:bean id="locales" name="lee.Locales">
<%-- 為locales實例傳入current參數(shù)值,如果SESSION_LOCALE為空,則返回ValueStack中l(wèi)ocale屬性值(即用戶瀏覽器設置的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="*">
   <!-- 將請求轉(zhuǎn)發(fā)給/WEB-INF/jsp/路徑下同名的JSP頁面 -->
   <result>/WEB-INF/jsp/{1}.jsp</result>
</action>
    </package>
</struts>

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在Struts 2.0中國際化(i18n)您的應用程序 - Max On Java - B...
Struts2要點學習
"struts中文問題","struts國際化問題"的終極解決方案
struts2.0國際化,JSP,action,參數(shù)國際化
深入理解Java國際化
國際化之struts2實現(xiàn)研究
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服