最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
中英文支持-你的程序做到了吗?---不落伍的应用Struts 2 的国际化支持特性(7)
时间:2008-04-28 编辑:简简单单 来源:一聚教程网
4.3 Struts 2的国际化支持
前面已经介绍了Java国际化的原理和方法,读者知道,Java的国际化需要一个Locale和一个资源包就能够实现国际化。资源包可以是资源文件也可以是资源类文件。
Struts 2的国际化是建立在Java国际化的基础之上的,也是使用资源包的方式,通过getBundle()方法来寻找指定Locale相关联的资源包,再从资源包文件中查找指定Key所对应的国际化资源信息。
Struts 2框架的底层国际化与Java国际化是一致的,作为一个良好的MVC框架,Struts 2将Java的国际化功能进行了封装和简化,开发者使用起来会更加简单快捷。
4.3.1 配置资源文件
Struts 2强调的是各个组件之间的松散耦合,而各个组件之间都是通过配置文件来实现相互关联和交互的。Struts 2框架的国际化也是如此。
Struts 2框架提供了多种加载国际化资源文件的方式,其中最常用的就是读者前面已经熟悉的加载资源文件的方式来实现国际化。Struts 2框架加载资源文件一般都是通过常量设置来完成的。Struts 2框架的默认配置文件struts-deault.xml中已经定义了国际化拦截器,部分内容如下:
定义拦截器 -->
定义拦截器alias -->
定义拦截器autowiring -->
定义异常拦截器-->
定义文件上传拦截器-->
定义国际化拦截器-->
定义日志拦截器-->
… …
可见,该拦截器为i18n,对应的class为com.opensymphony.xwork2.interceptor.I18n Interceptor,有兴趣的读者可以参考其API文档。
I18nInterceptor是一个拦截器类,该拦截器在Action执行处理之前执行,该拦截器掌管着当前用户请求Session中的Locale相关数据。该拦截器会在用户参数中查找一个特殊的参数值,使用该参数来设置当然的Locale信息,这就意味着开发者可以动态地修改当前session中的Locale值,这在开发国际化应用中非常有意义,开发者可以在处理用户请求过程中任何一个节点来改变Locale值,这样就能够动态改变程序的语言和区域的相关信息,实现完善的国际化功能。
例如,使用默认的拦截器参数,假设一个用户请求为foo.action?request_locale=en_US,那么英语(语言)和美国(国家)将会被保存到请求的session中,在以后的请求处理过程中会被使用。该拦截器有下面两个参数:
? parameterName:可选参数,即用户请求参数中包含Locale值的参数名称,默认为request_locale。
? attributeName:可选参数,session中被选用的Locale值的key,默认为WW_TRANS_I18N_LOCALE。
配置资源文件常量,即配置Struts 2框架的struts.custom.i18n.resources常量,该常量定义了Struts 2框架全局国际化资源文件的basename。
如果开发者需要在项目应用中提供国际化功能,则需要指定struts.custom.i18n.resources常量值。配置struts.custom.i18n.resources常量,可以在属性文件struts.properties中定义,也可以在配置文件struts.xml或者web.xml文件中定义。
假设要定义配置一个basename为globalMessages的struts.custom.i18n.resources常量,可以在struts.properties文件中做如下配置:
#在属性文件中定义basename
struts.custom.i18n.resources=globalMessages
也可以在struts.xml文件中配置basename:
I18N资源文件为globalMessages
同样,也可以在web.xml文件中定义:
… …
… …
配置好Struts 2框架的国际化资源文件的basename后,开发者就可以按照basename_language_country.properties的命名规则来建立不同语言环境的资源文件了,当然,如果是非西欧字符集,则需要使用native2ascii转换工具转换为Unicode编码即可。
4.3.2 Struts 2国际化应用
一旦开发者指定了struts.custom.i18n.resources常量,即指定了国际化资源文件的basename,那么就可以开发国际化应用了。下面以一个注册的示例来演示Struts 2框架的国际化功能。值得注意的是,该示例与前面章节的用户注册是有所差别的。注册用户Action关系图如图4.6所示。