一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java的Struts框架中配置國際化的資源存儲的要點解析

Java的Struts框架中配置國際化的資源存儲的要點解析

2020-04-19 12:18喬磊_1990 JAVA教程

這篇文章主要介紹了Java的Struts框架中配置國際化的資源存儲的要點解析,針對用戶所使用的語言來配置資源文件,需要的朋友可以參考下

1、資源文件命名

國際化資源文件命名格式如下:

?
1
2
3
basename_language_country.properties
basename_language.properties
basename.properties

其中basename為資源文件的基本名稱,language和country必須是java支持的語言和國家。獲取java支持的語言和國家代碼如下:

?
1
2
3
4
Locale[] locales = Locale.getAvailableLocales();
    for(Locale locale:locales){
      System.out.println("country:" + locale.getCountry() + ",language:" + locale.getLanguage());
    }

2、資源文件的配置和獲取

新建資源文件,在中文環境下,資源文件中的value值需要進行ascii轉換,可以通過運行后輸入native2ascii進行轉換,另外本文中使用了eclipse的屬性文件插件,因此直接顯示為中文。屬性文件配置如下:
info_en_US.properties

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
username=zhangsan
 
info_zh_CN.properties
 
username=張三
 
info_zh.properties
 
username=李四
password=lisi
 
info.properties
 
username=王五
password=wangwu
email=郵箱

另外,如果需要讀取到屬性文件中的值,需要在struts-config.xml文件中配置常量。

?
1
2
<!-- 使用資源文件名稱 ,其中value值代表資源文件的baseName-->
  <constant name="struts.custom.i18n.resources" value="info"></constant>

頁面獲取資源文件的方式為通過struts標簽<s:text/>,如下所示:

?
1
2
3
4
<!-- 資源文件獲取key值 -->
<s:text name="username"/>
<s:text name="password"/>
<s:text name="email"/>

另外,如果在form表單中獲取key值,方式如下:

?
1
2
<!--其中key值為資源文件中的key值,作用是為輸入框添加label名稱,和label的屬性值一樣。但是在常量中會導致key值不能夠從屬性文件獲取對應的value-->
<s:textfield name="login.username" key="username"></s:textfield>

另請注意在常量<constant name="struts.ui.theme" value="simple"/>使用時會導致<s:textfield/>中的key值不能夠從屬性文件獲取對應的value。
最后頁面顯示結果如下:

Java的Struts框架中配置國際化的資源存儲的要點解析

從以上的配置文件中可以看出這三個值的取值來源,由此可以看出,資源文件的搜索順序如下:
先從basename_language_country.properties中尋找相關的key值,沒有則尋找basename_language.properties中尋找相關的key值,沒有則到basename.properties中尋找相關的key值,沒有則顯示為name的值。

3、屬性文件中占位符的使用

屬性文件配置內容如下:

username=張三,{0},{1}

在jsp中使用標簽<s:param>值</s:param>進行參數的傳遞。

?
1
2
3
4
<s:text name="username">
  <s:param>你好</s:param>
  <s:param>歡迎你!</s:param>
</s:text>

4、action中應用資源文件

在action中使用資源文件,需要繼承ActionSupport類,ActionSupport類實現了TextProvider, LocaleProvider這兩個接口,其中TextProvider提供了獲取資源文件值的方法getText()方法,而LocaleProvider接口只有一個getLocale()方法,用來獲取Locale。
修改配置文件info_zh_CN.properties:

?
1
2
username=張三,{0},{1}
usernameError=用戶名稱不能為空!請確認!

在action中,獲取屬性文件方法如下:

?
1
this.getText("usernameError");

在action中使用占位符進行操作,代碼如下:

?
1
this.getText("username", new String[]{"你好","歡迎你"});

5、包范圍的資源文件

處于該包以及子包下的action都能訪問到該資源文件,放置位置為某個包下面,命名格式為:package_language_country.properties。其中package為固定格式。配置文件package_zh_CN.properties如下:

username=包范圍下的username

在包下面的action中可以使用getText(“username”)的方式獲取。

6、action范圍的資源文件

可以為某個單獨的action指定一個屬性文件,放置位置為某個action同級目錄下。命名格式為

?
1
ActionName_language_country.properties


配置action范圍的屬性文件:

?
1
username=action范圍內的username

action中同樣使用getText(“username”)方法進行獲取值。

7、資源文件的加載順序

對于action的使用getText(key)值來說,當同時存在action范圍內的屬性文件、包范圍內的屬性文件和全局屬性文件時,加載順序如下:
首先,在指定action內的屬性文件是否存在key值,如果存在,則取值,如果不存在,則查找當前action上一級包中是否存在指定key值的包范圍屬性文件,不存在則繼續上一級包中尋找,如果一直沒有找到,則在全局的屬性文件中尋找是否存在指定key值。如果存在指定的key值,則取出key值對應的value值,如果不存在,則默認為key值。
另外,當全局屬性文件,有多個資源文件時,需要按照basename_language_country、basename_language、basename的順序進行尋找。

8、頁面獲取資源文件

(1)使用<s:i18n/>訪問某個資源文件。
代碼如下:

?
1
2
3
4
5
6
7
8
9
<!-- 使用i18n標簽獲取屬性文件 -->
<!-- 獲取包范圍下的資源文件 -->
<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中包含了國際化和格式化標簽,使用國際化標簽可以讓一個jsp頁面可以根據訪問者所在的區域輸出不同語言的頁面表述。在此需要使用Maven添加依賴jar包。配置文件如下:

?
1
2
3
4
5
6
<!-- 引入jstl標簽庫 -->
 <dependency>
   <groupId>jstl</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
 </dependency>

在jsp頁面使用fmt標簽,應用代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 使用jstl標簽fmt -->
  <!-- 設置語言環境,會覆蓋客戶端傳遞的怨言 -->
  <fmt:setLocale value="zh_CN" scope="request"/>
  <!-- 裝載一個資源集,并保存在EL變量中 ,basename為基本名稱,如果為包范圍下則為com.struts.package,action范圍下為com.struts.service.LoginService-->
  <fmt:setBundle basename="info" scope="request" var="baseName"/>
  <fmt:message key="username" bundle="${baseName }">
    <!-- 占位符的傳遞參數 -->
    <fmt:param value="您好"/>
    <fmt:param value="歡迎"/>
  </fmt:message><br/>
  <!--fmt:bundle 設置一個只在標簽體內的訪問的資源集 -->
  <!-- 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>

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产三级精品播放 | 免费的网址 | 小向美奈子av | 国内久久婷婷综合欲色啪 | 99精品久久久久久 | 2022天堂岛日产 | 韩国悲惨事件30无删减在线 | 国内精品视频一区二区三区 | japanesemoms乱熟 | 男人免费视频 | 无人在线高清观看 | 国产美女极品免费视频 | 精品视频一区二区三区 | 污软件在线观看 | 久久免费观看视频 | 亚洲 欧美 中文 日韩 另类 | 亚洲狠狠婷婷综合久久久久网站 | 精品一区二区三区视频日产 | 亚洲午夜久久久久影院 | 91tv破解版不限次数 | 国产色在线观看 | 欧美一区二区三区在线观看免费 | www91在线观看 | 臀精插宫NP文| 三上悠亚精品专区久久 | 91日本在线观看亚洲精品 | 欧美一级片在线免费观看 | 亚洲AV久久无码精品蜜桃 | 九九99热久久999精品 | 欧美视| 欧美又黄又激烈真实床戏 | 日日免费视频 | 日本激情在线 | 欧美日韩一区二区三区在线播放 | 日韩精品特黄毛片免费看 | 色多多在线观看视频 | 欧美一区二区三区高清不卡tv | 我们日本在线观看免费动漫下载 | 性欧美高清理论片 | 高清麻生希在线 | 91在线精品视频 |