`
kencheng
  • 浏览: 1851 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts2国际化支持引导(初)

阅读更多

本文系KenCheng制作DEMO过程记录,欢迎转载,转载请注明出处。

文中涉及截图的部分暂无法上传上来,附件为本文的WORD版本(较全),如方便还请下载WORD版本以备不时之需。

国际化支持方案分析
概述
大到ERP群集系统、门户网站,小到公司网站、办公系统等面对的受众也渐渐变得更加多元化。因受众可能来自于各个地方,提供多语言版本的程序是十分必要的。JAVA语言的灵活性更便于人为的实现国际化相关操作。
同电脑编程有关的国际化是设计和编写应用程式以便能够在全球或多国环境中使用的过程。国际化程式能够支持不同的语言连同不同格式的日期、时间、货币和其他值,而无须软件修改。这通常涉及“软编码”或将文本组件同程式代码分离并且可能涉及可插入代码模块。
从业者通常将国际化(internationalization)简写为 I18N。原因是 internationalization 一词开始的 I 和最后的 N 之间有 18 个字母。试着多说、多写“internationalization”一词几次,您就会欣赏这个较短版本的价值。此外,您可能会看到“I18N´ed”作为“国际化的(internationalized)”的缩写形式。
本文将说明如何使用struts2的国际化支持,选择struts2是因为其是一个非常流行的WEB流程控制框架,并为国际化做了相关支持。JSTL等其他技术也可以用于实现国际化要求,但在WEB项目中使用便利程度和支持远不如struts2。
利弊分析
1. 因JAVA程序尤其是WEB方面,几乎所有的框架及相关可维护信息越来越多的以配置文件的形式出现。不仅为项目上线维护期间修改程序提供便利,也为多语言译制提供方便。
2. 基于配置的文本国际化,将描述性的文字抽离页面,形成统一的文本规格例如:“姓名”在两个以上的页面均有使用,修改描述字眼为“名字”时难免会有遗漏,将文字描述用键值的方式统一配置从该方面来将即减少了不必要的繁琐。
3. 根据用户的LOCAL或者选择不同,程序页面可以根据外界条件选择特定的国际化语言配置文本,保证了用户的操作顺畅。
4. 为翻译人员提供便利,增加同样键值的配置文件即可,无需逐个页面翻译。
国际化实现方式
Struts2实现方式
Struts1/2提供了视图层与控制层的servlet封装,通过对于WEB请求的拦截实现国际化的相关处理。并提供相关文本标签和国际化标签方便使用。采用国际化资源文件配置的方式为更换国际化资源提供方便的支持。
因struts2为struts的新版本,在诸多特性上优于struts1趋于WEBWORK的使用方式更加便利故以struts2作为例。说明国际化实现过程。
1. 新建WEB工程并配置struts2
1) 新建WEB工程并引入struts2的支持包。

2) 在web.xml中添加struts2的拦截器和标签库支持

拦截器FilterDispatcher是struts提供的请求拦截器处理请求分发,根据配置文件的相关配置,分流制定请求到指定的Action。
ActionContextCleanUp并不是必要配置,该拦截器负责在执行某些特殊操作时执行清理、释放资源等工作。

Struts2提供了相关的标签库便于应用,此处为标签库引用配置。该文件位于原包struts2-core-2.0.11.jar的META-INF目录下,如果出现配置标签无法使用的情况。请将该包下的文件拷贝到WEB-INF下,即可使用。
3) 请在根目录下(SRC源包)添加struts.xml文件和struts.properties
struts.xml:是struts2中Action的相关配置文件,用于指明请求的处理流向。具体配置请参见相关struts2的学习资料,因本文只关注国际化实现故此处带过。因struts2通过拦截器实现国际化,所以访问页面前必须要通过FilterDispatcher拦截并获取国际化资源的种类和相关国际化资源配置,此处配置通用JSP访问Action即要求配置的Action与JSP页面命名不能重复。

例:如首页为index.jsp但为了现行通过拦截器后访问页面,浏览器地址栏需要的是http://localhost:8080/工程名/index.action。这里的“index”会当做参数赋值给*也会赋值给{1}。关于通配符的使用请参见附录1。
struts.properties:指明了struts2的运行时配置,包括国际化的引用。

4) 添加相关的资源文件。因页面中的文本表现形式需要根据用户浏览器语言以及用户选择的语言种类变更。故需要提供对应的语言资源文件供系统调用更换。暂且以简体中文、英文、繁体中文为例增加相关配置文件至SRC源包跟目录下。相关命名规则请参见附录2。

资源文件中,对于中文等非西欧字符需要进行转码操作,使用MYECLIPSE的“MYECLIPSE PROPERTIES EDITOR”界面方式编辑可直接进行编码转换。


配置繁体中文与英文的过程类似。
5) JSP页面可以通过两种方式来引用配置好的国际化资源。
引入struts2标签库并设置字符集为UTF-8

获取资源文件中指定文本

运行结果:中文—英文
      
6) 仅仅根据浏览器语言环境来判定使用何种资源配置是不够全面的。需要根据需要满足用户主要选择语言的意愿。则有提供选择指定资源的必要。Struts2的国家化资源选择方式是通过在session中设置request_locale变量的值来实现。故认为干预该变量则会影响资源文件的选取从而达到预想功能。
提供一个选择器,获取当前的用户语言值(参见附录2 Locale部分描述)、根据该值选取当前的默认环境资源文件为浏览器语言环境,并根据用户选择动态加载指定的资源文件。实现请参见LangSelector.jsp代码以及com.tpc.i18n.


因struts.xml中使用了通配符的方式处理,故此获取到当前URL跳转即可。
附录
附录1:(struts2通配符支持)
无论是struts2的Action还是Mapping都可以使用通配符做相应的表示。
*:表示可以匹配0个或者多个字符,但不包括“/”。
**:表示可以匹配0个或者多个字符,包括“/”。
\ :转义字符。
{N}:N为1-9之间的数字,用于匹配当前指定顺序位置*的内容,在action mapping中如果当前Action匹配了edit*\add*\delete* 则{1}为edit、{2}为add 、{3}为delete。
附录2:(struts2资源文件命名&Local参数相关)
Struts2的资源文件命名可以参考:basename_language_country.properties的格式。
例如:
globalMessages_en_US.properties(英文【美国】)
globalMessages_zh_CN.properties(中文【中国大陆】)
globalMessages_zh_TW.properties(繁体中文【中国台湾】)
等等,根据不同的国家和地区来区分具体的资源配置。
关于国家枚举使用请参见JAVA API (java.util.Locale) 的相关说明,静态枚举字段用于标示各个国家和地区常量参数。
相关引用
附录2相关引用摘自
http://hi.baidu.com/javagarden/blog/item/3099a345e1a77038879473b5.html

 

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics