`

《研磨struts2》第九章 国际化 之 9.6 指定语言信息的不同方式

 
阅读更多

9.6  指定语言信息的不同方式

9.6.1概述

在本节开始之前,请读者把包级别的国际化信息删掉,仅保留全局级别的国际化信息。

       在9.3.3小节中,已经学过修改、使用浏览器语言设置的方式了,这里就不赘述了。接下来看看其它的方式

9.6.2 Struts2的常量设置

还可以使用Struts2的常量设置来覆盖浏览器的语言设置。比如前面的示例,在struts.xml中加上struts.locale这个常量,值为需要使用的语言,示例如下:

 

java代码:
  1. <constant name="struts.locale" value="zh_CN"/>  

这时候,会发现无论怎么修改浏览器的语言设置,Struts2都会去访问中文信息了。

9.6.3由用户选择语言

以上的两种设置,还可能满足不了日常需求:

  • 常量设置太死板,加上了常量设置,就不方便访问其他语言的信息了。
  • 浏览器语言设置太麻烦。用户想修改访问的语言时,必须到浏览器的属性对话框去一顿勾选。对于一般用户来讲,这太繁琐。

幸好Struts2提供了最灵活的、也是级别最高的方式,那就是由用户选择语言。用户只要在提交请求的时候加上request_locale这个参数,并提供对应的值就可以自由选择语言了。

这得力于Struts2的i18n内建拦截器,defaultStack拦截器栈引用了i18n拦截器,因此,能很方便的由用户来选择语言。

i18n拦截器在Action运行之前会检查请求中是否包含了一个叫做“request_locale”的参数,如果存在此参数,则会用它的值建立一个Locale对象,并用这个Locale对象去覆盖Struts2的常量设置和浏览器的语言设置。除此之外,i18n拦截器还会把这个Locale对象放到名为WW_TRANS_I18N_LOCALE的Session属性中去,而这个属性也会覆盖Struts2的常量设置和浏览器的语言设置。因此,只需要传入一次request_locale参数,session就会记住用户的选择,整个网站就会都变成用户选择的语言了。

       来示例一下,第一次访问结果页面的时候,输出相关的session属性,如下:

 

java代码:
  1. <%@ taglib prefix="s" uri="/struts-tags" %>  
  2.   
  3. <s:form>  
  4.     <s:textfield name="name1" key="labela"/>  
  5. </s:form>  
  6. <hr>  
  7. <s:property value="#session.WW_TRANS_I18N_LOCALE" default="找不到"/>  

由于当前的struts.xml设置常量struts.locale的值为zh_CN,所以,第一次访问将会使用常量设置的中文,而且session中也没有WW_TRANS_I18N_LOCALE这个属性。运行结果如下:

图9.10 使用常量配置指定国际化语言种类的结果

       再次访问的时候,在请求里面加上request_locale参数,设置值为en_US,完整URL为http://localhost:9080/helloworld/i18nAction.action?request_locale=en_US。

这时候,请求中带有request_locale参数并指定为英文,因此,页面访问英文的国际化信息,并将en_US存入了session。运行结果如下:

图9.11 使用用户请求参数指定国际化语言种类的结果

       再来访问一次,访问路径为:http://localhost:9080/helloworld/i18nAction.action,虽然这次请求中没有包含request_locale参数,但是session已经纪录了用户上次选择的英文,因此页面仍然访问英文信息,且session中仍然有en_US。

9.6.4三种方式的覆盖关系

对于这三种指定语言种类的方式,其优先级为:

       用户指定参数 > struts.xml中配置常量 > 浏览器设置

       而且,用户参数指定的方式,只需要设置一次就可以了,在整个session生命周期内,都不用再次设置。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4088.html

欢迎访问http://sishuok.com获取更多内容

3
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics