Java的Struts框架中配置國(guó)際化的資源存儲(chǔ)的要點(diǎn)解析
1、資源文件命名
國(guó)際化資源文件命名格式如下:
basename_language_country.properties basename_language.properties basename.properties
其中basename為資源文件的基本名稱(chēng),language和country必須是java支持的語(yǔ)言和國(guó)家。獲取java支持的語(yǔ)言和國(guó)家代碼如下:
Locale[] locales = Locale.getAvailableLocales();
for(Locale locale:locales){
System.out.println("country:" + locale.getCountry() + ",language:" + locale.getLanguage());
}
2、資源文件的配置和獲取
新建資源文件,在中文環(huán)境下,資源文件中的value值需要進(jìn)行ascii轉(zhuǎn)換,可以通過(guò)運(yùn)行后輸入native2ascii進(jìn)行轉(zhuǎn)換,另外本文中使用了eclipse的屬性文件插件,因此直接顯示為中文。屬性文件配置如下:
info_en_US.properties
username=zhangsan info_zh_CN.properties username=張三 info_zh.properties username=李四 password=lisi info.properties username=王五 password=wangwu email=郵箱
另外,如果需要讀取到屬性文件中的值,需要在struts-config.xml文件中配置常量。
<!-- 使用資源文件名稱(chēng) ,其中value值代表資源文件的baseName--> <constant name="struts.custom.i18n.resources" value="info"></constant>
頁(yè)面獲取資源文件的方式為通過(guò)struts標(biāo)簽<s:text/>,如下所示:
<!-- 資源文件獲取key值 --> <s:text name="username"/> <s:text name="password"/> <s:text name="email"/>
另外,如果在form表單中獲取key值,方式如下:
<!--其中key值為資源文件中的key值,作用是為輸入框添加label名稱(chēng),和label的屬性值一樣。但是在常量中會(huì)導(dǎo)致key值不能夠從屬性文件獲取對(duì)應(yīng)的value--> <s:textfield name="login.username" key="username"></s:textfield>
另請(qǐng)注意在常量<constant name="struts.ui.theme" value="simple"/>使用時(shí)會(huì)導(dǎo)致<s:textfield/>中的key值不能夠從屬性文件獲取對(duì)應(yīng)的value。
最后頁(yè)面顯示結(jié)果如下:

從以上的配置文件中可以看出這三個(gè)值的取值來(lái)源,由此可以看出,資源文件的搜索順序如下:
先從basename_language_country.properties中尋找相關(guān)的key值,沒(méi)有則尋找basename_language.properties中尋找相關(guān)的key值,沒(méi)有則到basename.properties中尋找相關(guān)的key值,沒(méi)有則顯示為name的值。
3、屬性文件中占位符的使用
屬性文件配置內(nèi)容如下:
username=張三,{0},{1}
在jsp中使用標(biāo)簽<s:param>值</s:param>進(jìn)行參數(shù)的傳遞。
<s:text name="username"> <s:param>你好</s:param> <s:param>歡迎你!</s:param> </s:text>
4、action中應(yīng)用資源文件
在action中使用資源文件,需要繼承ActionSupport類(lèi),ActionSupport類(lèi)實(shí)現(xiàn)了TextProvider, LocaleProvider這兩個(gè)接口,其中TextProvider提供了獲取資源文件值的方法getText()方法,而LocaleProvider接口只有一個(gè)getLocale()方法,用來(lái)獲取Locale。
修改配置文件info_zh_CN.properties:
username=張三,{0},{1}
usernameError=用戶(hù)名稱(chēng)不能為空!請(qǐng)確認(rèn)!
在action中,獲取屬性文件方法如下:
this.getText("usernameError");
在action中使用占位符進(jìn)行操作,代碼如下:
this.getText("username", new String[]{"你好","歡迎你"});
5、包范圍的資源文件
處于該包以及子包下的action都能訪(fǎng)問(wèn)到該資源文件,放置位置為某個(gè)包下面,命名格式為:package_language_country.properties。其中package為固定格式。配置文件package_zh_CN.properties如下:
username=包范圍下的username
在包下面的action中可以使用getText(“username”)的方式獲取。
6、action范圍的資源文件
可以為某個(gè)單獨(dú)的action指定一個(gè)屬性文件,放置位置為某個(gè)action同級(jí)目錄下。命名格式為
ActionName_language_country.properties
。
配置action范圍的屬性文件:
username=action范圍內(nèi)的username
action中同樣使用getText(“username”)方法進(jìn)行獲取值。
7、資源文件的加載順序
對(duì)于action的使用getText(key)值來(lái)說(shuō),當(dāng)同時(shí)存在action范圍內(nèi)的屬性文件、包范圍內(nèi)的屬性文件和全局屬性文件時(shí),加載順序如下:
首先,在指定action內(nèi)的屬性文件是否存在key值,如果存在,則取值,如果不存在,則查找當(dāng)前action上一級(jí)包中是否存在指定key值的包范圍屬性文件,不存在則繼續(xù)上一級(jí)包中尋找,如果一直沒(méi)有找到,則在全局的屬性文件中尋找是否存在指定key值。如果存在指定的key值,則取出key值對(duì)應(yīng)的value值,如果不存在,則默認(rèn)為key值。
另外,當(dāng)全局屬性文件,有多個(gè)資源文件時(shí),需要按照basename_language_country、basename_language、basename的順序進(jìn)行尋找。
8、頁(yè)面獲取資源文件
(1)使用<s:i18n/>訪(fǎng)問(wèn)某個(gè)資源文件。
代碼如下:
<!-- 使用i18n標(biāo)簽獲取屬性文件 -->
<!-- 獲取包范圍下的資源文件 -->
<s:i18n name="com/struts/package">
<s:text name="username"></s:text>
</s:i18n>
<!-- 獲取action范圍下的資源文件 -->
<s:i18n name="com/struts/service/LoginService">
<s:text name="username"></s:text>
</s:i18n>
(2)<fmt/>的使用
JSTL中包含了國(guó)際化和格式化標(biāo)簽,使用國(guó)際化標(biāo)簽可以讓一個(gè)jsp頁(yè)面可以根據(jù)訪(fǎng)問(wèn)者所在的區(qū)域輸出不同語(yǔ)言的頁(yè)面表述。在此需要使用Maven添加依賴(lài)jar包。配置文件如下:
<!-- 引入jstl標(biāo)簽庫(kù) -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
在jsp頁(yè)面使用fmt標(biāo)簽,應(yīng)用代碼如下:
<!-- 使用jstl標(biāo)簽fmt -->
<!-- 設(shè)置語(yǔ)言環(huán)境,會(huì)覆蓋客戶(hù)端傳遞的怨言 -->
<fmt:setLocale value="zh_CN" scope="request"/>
<!-- 裝載一個(gè)資源集,并保存在EL變量中 ,basename為基本名稱(chēng),如果為包范圍下則為com.struts.package,action范圍下為com.struts.service.LoginService-->
<fmt:setBundle basename="info" scope="request" var="baseName"/>
<fmt:message key="username" bundle="${baseName }">
<!-- 占位符的傳遞參數(shù) -->
<fmt:param value="您好"/>
<fmt:param value="歡迎"/>
</fmt:message><br/>
<!--fmt:bundle 設(shè)置一個(gè)只在標(biāo)簽體內(nèi)的訪(fǎng)問(wèn)的資源集 -->
<!-- package范圍下的資源文件 -->
<fmt:bundle basename="com.struts.package">
<fmt:message key="username"/>
</fmt:bundle>
<!-- action范圍下的資源文件 -->
<fmt:bundle basename="com.struts.service.LoginService">
<fmt:message key="username"/>
</fmt:bundle>
- 深入解析Java的Struts框架中的控制器DispatchAction
- 詳解Java的Struts框架以及相關(guān)的MVC設(shè)計(jì)理念
- Java的Struts框架中登陸功能的實(shí)現(xiàn)和表單處理器的使用
- Java的Struts框架中append標(biāo)簽與generator標(biāo)簽的使用
- 簡(jiǎn)單說(shuō)明Java的Struts框架中merge標(biāo)簽的使用方法
- 總結(jié)Java的Struts框架的異常處理方法
- 詳解Java的Struts框架中注釋的用法
- Java的Struts框架中Action的編寫(xiě)與攔截器的使用方法
- Java下Struts框架中的ActionForm類(lèi)詳解
相關(guān)文章
Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的酒店前臺(tái)管理小功能(實(shí)例代碼)
這篇文章主要介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的酒店前臺(tái)管理小功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
SpringBoot項(xiàng)目部署到服務(wù)器上的方法(Jar包)
這篇文章主要介紹了SpringBoot項(xiàng)目部署到服務(wù)器上的方法(Jar包),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
java 如何計(jì)算同比增長(zhǎng)工具類(lèi)
這篇文章主要介紹了java 如何計(jì)算同比增長(zhǎng)工具類(lèi)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java里得到00:00:00格式的時(shí)分秒的Timestamp
Java里如何得到00:00:00格式的時(shí)分秒的Timestamp ,下面是具體的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2009-09-09
Springboot?整合?RocketMQ?收發(fā)消息的配置過(guò)程
這篇文章主要介紹了Springboot?整合?RocketMQ?收發(fā)消息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
springboot+redis+lua實(shí)現(xiàn)分布式鎖的腳本
本文介紹了如何使用Spring Boot、Redis和Lua腳本實(shí)現(xiàn)分布式鎖,包括實(shí)現(xiàn)原理、代碼實(shí)現(xiàn)和存在的問(wèn)題,感興趣的朋友跟隨小編一起看看吧2024-11-11
Spring?MVC和springboot靜態(tài)資源處理問(wèn)題
這篇文章主要介紹了Spring?MVC和springboot靜態(tài)資源處理問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
java設(shè)計(jì)模式之橋接模式(Bridge)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之橋接模式Bridge,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Eureka注冊(cè)不上或注冊(cè)后IP不對(duì)(多網(wǎng)卡的坑及解決)
這篇文章主要介紹了Eureka注冊(cè)不上或注冊(cè)后IP不對(duì)(多網(wǎng)卡的坑及解決),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

