Spring4.x官方参考文档中文版——第21章 Web MVC框架(21)

21.8 地区(locale)的使用

       Spring的大多数架构都是支持国际化的,Spring MVC框架也是如此。DispatcherServlet允许你自动地使用客户端的地区来解析消息。这些操作是被LocaleResolver对象完成的。

       当一个请求到来时,DispatcherServlet会寻找一个地区解析器,如果能够找到的话,会尝试使用它来设置地区。通过使用RequestContext.getLocale()方法,那些被地区解析器解析过的地区,就能被检索到了。

       此外,对于自动化的地区解析,你同样可以在handler mapping(处理器映射)上绑定拦截器(详见”21.4.1 使用HandlerInterceptor拦截请求”,了解处理器映射拦截器的更多信息) 来在特定条件下改变地区。例如:基于在请求中的某个参数来拦截。

       地区解析器和拦截器是在org.springframework.web.servlet.i18n包中被定义的,并且它们可以通过在应用的context中进行配置。下面这些是Spring中可以选择的地区解析器。

 

21.8.1 获取时区信息

       为了获取客户端的地区,一般来说获取时区是很有用的。LocaleContextResolver接口提供了对于LocaleResolver的扩展,它允许解析器提供更多样的,包含时区信息的LocaleContext。

当他被启用时,用户的TimeZone对象能被RequestContext.getTImeZone()方法获取到。时区信息会自动地被Date/Time Converter对象和Formatter对象使用Spring的ConversionService进行注册。

 

21.8.2 AcceptHeaderLocaleResolver(accept报头地区解析器)

       这个地区解析器会检测从客户端发送(比如:一个web浏览器)的请求中的accept-language报头。一般来说,这个报头的字段包含了客户端操作系统的地区信息。请注意,这个解析器不支持时区信息。

 

21.8.3 CookieLocaleResolver(cookie地区解析器)

       这个地区解析器检测可能在客户端中存在的Cookie对象,查看其中是否包含了Locale或者TimeZone,如果存在,它会使用配置文件中定义的cookie属性,使用这个地区解析器的属性,你能够定义cookie的名字,同样也能定义它的生命周期,下面是定义CookieLocaleResolver的例子:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
 
    <property name="cookieName" value="clientlanguage"/>
 
    <!—以秒计,如果设为-1,cookie就不会保留(浏览器关闭时删除)-->
    <property name="cookieMaxAge" value="100000">
 
</bean>

表21.4 CookieLocaleResolver的properties(属性)

属性

默认值

描述

cookieName

classname + LOCALE(类名+地区)

Cookie的名字

cookieMaxAge

Integer.MAX_INT

Cookie在客户端中保留的最大时间,如果设为-1,cookie将不会保留;这个cookie只能在客户端关闭前使用。

cookiePath

/

在网站中,限制cookie只能在某个路径下可见。当cookiePath被定义时,cookie只能在其定义的路径及子路径下可见。

 

21.8.4 SessionLocaleResolver(session地区解析器)

       SessionLocaleResolver可以从session中检索与用户请求相关的Locale对象和TimeZone对象。与CookieLocaleResolver相反的是,这种策略是在Servlet容器中的HttpSession里储存本地选择的地区设置。这样做的结果是,每一个session里的这些设置都只是暂时的,所以会在每一个session关闭时丢失这些设置。

       请注意,SessionLocaleResolver与外部的session管理机制(如:Spring Session项目)没有直接联系。SessionLocaleResolver会针对现有HttpServletRequest来衡量并修改相应的HttpSession属性。

 

21.8.5 LocaleChangeInterceptor(地区变换拦截器)

       你能够为其中一个handlermapping(处理器映射)添加LocaleChangeInterceptor来启用地区的变换(详见”21.4 处理器映射”)。他能够检测请求中的参数,调用在LocaleResolver中的setLocale()方法来改变地区(LocaleResolver也同时存在于context中)。下面的例子,展示了在所有含有siteLanguage参数名的”*.view”资源的调用的条件下,就会改变它的地区。比如,有一个请求的URL是”http://www.sf.net/home.view?siteLanguage=nl”,那么就会改变站点的语言为Dutch(荷兰语)。

<bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="siteLanguage"/>
</bean>

<bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>

<bean id="urlMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="localeChangeInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <value>/**/*.view=someController</value>
    </property>
</bean>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值