Struts2的国际化和消息处理

来源:互联网 发布:wow数据库 3.35 编辑:程序博客网 时间:2024/06/14 06:40

  前边我们讲了如何在JSP页面显示错误消息和自定义类型转换器,即需要我们使用<s:fielderror/>标签和写一个实现StrutsTypeConverter接口的类并有两种方式配置这个实现类转换器(基于属性配置和基于目标准换类型配置)。今天我们来讲一讲Struts2框架中的国际化和消息处理。

  1.国际化概述

  国际化是指在不修改程序中源代码的情况下,让开发出来的程序可以支持多种多种语言和数据格式的技术。

  本地化:指让一个具备国际化支持的应用程序支持某个特定地区。

  2.Struts的国际化是建立在Java国际化的基础上的

  我们先在程序中为不同国家、语言提供对应的消息资源文件。

  Struts2框架会根据请求中包含的locale对象加载对应的资源文件。(实现超链接切换语言)

  通过程序代码取得该资源文件中指定key对应的消息。(如何在JSP和Action中获取国际化资源文件的key对应的value值)

  3.配置国际化资源文件

  配置国际化资源文件,说白了就是将JSP中标签的显示字段由固定的语言的内容转换成多种语言的内容写在配置文件中。配置国际化资源文件由三种方式可以让Struts2框架读取到里边的内容

  ① Action范围内的配置:在Action类所在路径下建立文件名ActionClassName_language_country.proeprties:ActionClassName_zh_CN.properties

  ② 包范围资源文件:在包所在路径下建立文件名为:(不是packageName)package_language_country.properties:com.liucc.pojo_en_US.properties

  ③ 全局国际化资源文件(推荐使用):在SRC路径下命名为baseName_language_country.proeprties文件,如:i18n_en_US.properties

  需要注意的是:这三种资源文件若同时存在,那么他们的加载顺序原则是,离当前Action越近的配置文件优先被加载。(精确匹配原则

  4.如何在Action中访问当这些国际化资源文件当中配置的key对应的value值

  通过让Action实现TextProvider接口(ActionSupport),那么他就可以获取值栈中defaultTextProvider的内容,通过getText(“StringName”)方法来获取国际化资源文件当中的key键对应的value值。

  5.在JSP页面获取国际化资源文件当中key键对应的value值

  我们国际化的目的最终都是为了在View根据不同的语言来显示字段的值。那么当表单主题是xhtml时,我们可以用标签的key属性俩接收资源文件当中key对应的值(替代原来用label属性写死的情况)。当theme换为simple时,key属性就不再起作用了,我们要使用<s:text name="key"/>来显示国际化资源文件中某个字段的的值。

  6. 用超链接来改变页面的语言状况

  Struts2用i18nInterceptor拦截器来处理国际化的内容。具体实现是通过定义超链接的请求参数的request_locale=language_country来实现,如<a href="servlet?request_locale=en_US">英文</a>和<a href="servlet?request_locale=zh_CN">中文</a>.。具体流程如下:

  ① Struts2使用i18nInterceptor作为拦截器来处理国际化,并将其注册在默认拦截器中。

  ② i18nInterceptor拦截器在执行Action方法前,会自动查找一个名称为request_locale的参数,若存在,则这个拦截器会将这个参数转换成locale对象,并将其设置为默认的Locale,然后将这个locale对象设置在session的WW_TRANS_I18N_LOCALE属性中

  ③ 若request没有名为WW_TRANS_I18N_LOCALE的参数,则i18nInterceptor拦截器将会从session中获取WW_TRANS_I18N_LOCALE中的值,若该值不为空,则将该值设置为浏览器的默认Locale

  ④ 若session中的WW_TRANS_I18N_LOCALE值为空,则从ActionContext中获取对象、