Struts学习笔记(三)

 
Struts 中的本地化

  Struts自己封装了 实现国际化的一套方法,虽然这部分内容不是Struts的核心内容,但是对于构建多语言支持的web应用在将来是应该非常热门的课题,熟悉了解Struts的本地化,对熟悉Struts,掌握国际化应用是非常有益处的,废话不多说,将自己对Struts中本地化的一些理解写在下面,供自己以后参考,也希望对朋友们有所帮助enjoying~^_^

 

Locale 对象
可以通过Locate的构造方法来创建Locale对象,如:
Locale locale1 = Locale.JAPAN;
Locale locale2 
=   new  Locale(“ja”,”JP”);
Locale defaultLocale 
=  Locale.getDefault();
而对于Web应用程序,通常不必创建自己的Locale实例,因为Web容器会负责创建所需要的Locale实例。在应用程序中可以调用 httpServletRequest对象的以下两个方法,来取得包含Web客户的Locale信息的Locale实例:
Public java.util.Locale getLocale(); // 若用户没有配置则返回默认的Locale
Public java.util.Enumeration getLocales(); // 返回一个集合对象,按优先级降序排列的所有Locale对象。
在处理每一个用户请求时,RequestProcessor类都会调用它的processLocale()方法把Locale对象存储在session范围,不过需要满足两个条件:
1. Struts配置文件的<controller>元素的locale属性为true
2. 在session范围内的Locale对象还不存在
processLoale()方法把Locale对象存储在session范围中时,属性key为Globals.LOCALE_KEY,这个常量的字符串值为“org,apache.struts.action.LOCALE”
Struts中用RequestUtils.getUserLocale(request,null)方法来获取Locale信息。该方法返回一个Locale对象,该方法一般被封装在Action基类中的getLocale()方法中,在Web其他应用程序的其他地方也可以直接调用RequestUtils类的getUserLocale()方法来获得Locale对象。
说了很多Locale的知识,再来看看实现国际化另一个重要的类: ResourceBundle
java.util.ResourceBundle类提供存放和管理与Locale相关的资源的功能。Struts框架没有直接使用Java提供的ResourceBundle,Struts框架自己提供了两个类:
org.apach.struts.util.MessageResources
org.apach.struts.util.PropertyMessageResources 
// MessageResources的子类
 
如何在Struts 配置文件中对应用需要用到的Resource Bundle 进行配置呢?
Struts配置文件中的每个<message-resources>元素定义了一个Resource Bundle。当应用中包含多个Resource Bundle时,它们通过<message-resource>元素的key属性来区分。例如:
< message-resources  parameter =”application”/>  //没有key属性则表示为应用默认的RB
<message-resources key
=”IMAGE_RESOURCE_KEY”  parameter =”imageresources”/>
 
通过编程来访问Resource Bundle
在Action基类中定义了getResources(request)方法,他可以返回默认的Message Resource对象,代表当前应用模块使用的默认Resource Bundle。如果要获得特定的MessageResource对象,可以调用Action基类的getResources(request,key)方法,其中参数key和Struts配置文件的<message-resources>元素的key属性对应。得到MessageResources对象后,就可以通过它得方法来访问消息文本,例如:
Locale locale  =  getLocale(request);
MessageResources messages 
=  getResources(request);
// or MessageResources message = getResources(request,”KEY”);
String msg  =  messages.getMessage(locale,”your.resource.message.name’);
Org.apache.struts.util.MessageResources的getMessage()方法有好几种重载形式,下面列出常用的几种:
根据参数指定的Locale检索对应的自愿文件,然后返回和参数key对应的消息文本
getMessage(java.util.Locale locale,java.lang.String key);
 
根据参数指定的Locale检索对应的资源文件,然后返回和参数key对应的消息文本,args参数用于替换复合消息文本中参数
getMessage(java.util.Locale locale,java.lang.String key,java.lang.Object[]args)
 
根据默认的Locale检索对应的资源文件,然后返回和参数key对应的消息文本
getMessage(String key);
Struts框架中的许多内在组件和Resource Bundle是绑定在一起的。如:
ActionMessage类和<html:errors>标签(new ActionMessage(“YOUR_RESOURCE_KEY”))
Struts Bean标签库的<bean:message>标签(<bean:message key=”YOUR_RESOURCE_KEY”/>)
在Validator验证框架中访问Resource Bundle.
在声明异常处理中访问Resource Bundle。
 
对一个具体应用实施国际化的步骤:
1. 设置字符编码
为了保证同一个JSP页面能支持多种语言,可以将所有JSP页面的字符编码同一设为”UTF-8”
<%@page contentType=”text/html”;charset=”UTF-8’ language=”java”%>
2. 对文本国际化
在JSP中不应该直接包含本地化的消息文本,而应该通过<bean:message>标签从Resource Bundle中获取文本。如:
< bean:message  key =”YOUR_RESOURCE_KEY” >
3. 对按钮国际化
< html:submit  property =”submit” >
   
< bean:message  key =”YOU_RESOURCE_KEY” />
< html:submit />
4. 对图片国际化
< html:img  pageKey =”/YOUR_REOURCE_KEY”  altKey =”YOUR_RESOURCE_KEY” />
 
小技巧:
要生成按GB2312编码的中文资源文件,可以先写一个临时的资源文件,里面用中文写好信息,然后用JDK提供了native2ascii命令,来对怎个文件实现字符编码转换,如:
DOS下:
native2ascii –encoding gb2312 application_temp.properties application_zh_CN.properties

执行以上命令后,将生成用gb2312编码代替你的中文字符后的application_zh_CN.properties文件。当Web客户的Locale为中文时,Struts框架将自动选择来自application_zh_CN.properties文件的消息文本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值