在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java的Struts框架中配置国际化的资源存储的要点解析

2016-7-29 15:37| 发布者: zhangjf| 查看: 757| 评论: 0

摘要: 1、资源文件命名 国际化资源文件命名格式如下: basename_language_country.properties basename_language.properties basename.properties 复制代码 其中basename为资源文件的基本名称,language和coun ...

1、资源文件命名

国际化资源文件命名格式如下:

  1. basename_language_country.properties
  2. basename_language.properties
  3. basename.properties
复制代码

其中basename为资源文件的基本名称,language和country必须是java支持的语言和国家。获取java支持的语言和国家代码如下:

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

2、资源文件的配置和获取

新建资源文件,在中文环境下,资源文件中的value值需要进行ascii转换,可以通过运行后输入native2ascii进行转换,另外本文中使用了eclipse的属性文件插件,因此直接显示为中文。属性文件配置如下:
info_en_US.properties

  1. username=zhangsan
  2. info_zh_CN.properties
  3. username=张三
  4. info_zh.properties
  5. username=李四
  6. password=lisi
  7. info.properties
  8. username=王五
  9. password=wangwu
  10. email=邮箱
复制代码

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

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

页面获取资源文件的方式为通过struts标签,如下所示:

  1. <!-- 资源文件获取key值 -->
  2. <s:text name="username"/>
  3. <s:text name="password"/>
  4. <s:text name="email"/>
复制代码

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

  1. <!--其中key值为资源文件中的key值,作用是为输入框添加label名称,和label的属性值一样。但是在常量中会导致key值不能够从属性文件获取对应的value-->
  2. <s:textfield name="login.username" key="username"></s:textfield>
复制代码

另请注意在常量使用时会导致中的key值不能够从属性文件获取对应的value。
最后页面显示结果如下:

201642385253389.jpg (302×171)

从以上的配置文件中可以看出这三个值的取值来源,由此可以看出,资源文件的搜索顺序如下:
先从basename_language_country.properties中寻找相关的key值,没有则寻找basename_language.properties中寻找相关的key值,没有则到basename.properties中寻找相关的key值,没有则显示为name的值。

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

属性文件配置内容如下:

username=张三,{0},小贝

在jsp中使用标签进行参数的传递。

  1. <s:text name="username">
  2. <s:param>你好</s:param>
  3. <s:param>欢迎你!</s:param>
  4. </s:text>
复制代码

4、action中应用资源文件

在action中使用资源文件,需要继承ActionSupport类,ActionSupport类实现了TextProvider, LocaleProvider这两个接口,其中TextProvider提供了获取资源文件值的方法getText()方法,而LocaleProvider接口只有一个getLocale()方法,用来获取Locale。
修改配置文件info_zh_CN.properties:

  1. username=张三,{0},小贝
  2. 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)使用访问某个资源文件。
代码如下:

  1. <!-- 使用i18n标签获取属性文件 -->
  2. <!-- 获取包范围下的资源文件 -->
  3. <s:i18n name="com/struts/package">
  4. <s:text name="username"></s:text>
  5. </s:i18n>
  6. <!-- 获取action范围下的资源文件 -->
  7. <s:i18n name="com/struts/service/LoginService">
  8. <s:text name="username"></s:text>
  9. </s:i18n>
复制代码

(2)的使用
JSTL中包含了国际化和格式化标签,使用国际化标签可以让一个jsp页面可以根据访问者所在的区域输出不同语言的页面表述。在此需要使用Maven添加依赖jar包。配置文件如下:

  1. <!-- 引入jstl标签库 -->
  2. <dependency>
  3. <groupId>jstl</groupId>
  4. <artifactId>jstl</artifactId>
  5. <version>1.2</version>
  6. </dependency>
复制代码

在jsp页面使用fmt标签,应用代码如下:

  1. <!-- 使用jstl标签fmt -->
  2. <!-- 设置语言环境,会覆盖客户端传递的怨言 -->
  3. <fmt:setLocale value="zh_CN" scope="request"/>
  4. <!-- 装载一个资源集,并保存在EL变量中 ,basename为基本名称,如果为包范围下则为com.struts.package,action范围下为com.struts.service.LoginService-->
  5. <fmt:setBundle basename="info" scope="request" var="baseName"/>
  6. <fmt:message key="username" bundle="${baseName }">
  7. <!-- 占位符的传递参数 -->
  8. <fmt:param value="您好"/>
  9. <fmt:param value="欢迎"/>
  10. </fmt:message><br/>
  11. <!--fmt:bundle 设置一个只在标签体内的访问的资源集 -->
  12. <!-- package范围下的资源文件 -->
  13. <fmt:bundle basename="com.struts.package">
  14. <fmt:message key="username"/>
  15. </fmt:bundle>
  16. <!-- action范围下的资源文件 -->
  17. <fmt:bundle basename="com.struts.service.LoginService">
  18. <fmt:message key="username"/>
  19. </fmt:bundle>
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 12:39

Copyright 2015-2025 djqfx

返回顶部