`

《研磨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
分享到:
评论

相关推荐

    基于net的超市管理系统源代码(完整前后端+sqlserver+说明文档+LW).zip

    功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。

    LABVIEW程序实例-公式节点.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    大米商城开源版damishop(适合外贸)

    大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插

    LABVIEW程序实例-通过全局变量接收数据.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    LABVIEW程序实例-日历控件.zip

    labview程序代码参考学习使用,希望对你有所帮助。

    毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频.zip

    毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频

Global site tag (gtag.js) - Google Analytics