12、Spring MVC 之 Using locales

来源:互联网 发布:淘宝卖家破损补寄 编辑:程序博客网 时间:2024/06/06 02:44

Spring MVC的架构是支持i18n的。DispatcherServlet让你能够使用客户端的locale自动解析message.主要是通过LocalResolver这个对象办到的。

当前端请求到来,DispatcherSevlet寻找一个locale解析器。如果它找到了,它就会试图用它来设置locale。使用RequestContext.getLocale()方法,你可以检索locale然后可以使用locale解析器解析。

除了自动locale解析,在特殊情况下你还可以将拦截器附加到处理程序映射(for detail:Spring MVC 之 Handler mappings)来改变locale。例如,基于request当中的参数。

Locale解析器和interceptors定义在org.springframework.web.servlet.i18n包中可以使用简单的方式来配置它到你的application上下方中。下面就是Spring中的一个选择区域的解析器。

1、获取Time Zone信息

除了获取客户端的locale,我们通常还需要知道它们的时区。继承自LocaleResolverLocaleContextResolver接口让解析器提供了更丰富的LocaleContext,其中包含时区信息。

使用RequestContext.getTimeZone()方法可以获取到TimeZone。时区信息将自动使用在Spring的ConversionService注册的日期/时间ConverterFormatter对象。

2、AcceptHeaderLocaleResolver

这个locale解析器检查客户端(e.g. web浏览器)request的header中的accept-language。通常这个头字段包含客户机的操作系统的语言环境.

注意:这个解析器不支持时区信息。

3、CookieLocaleResolver

这个解析器检查在客户端中Cookie是否指定了Locale或者TimeZone。如果指定了话,它就会使用指定的细节。使用这个locale解析,你可以指定cookie的名字还有就是这个cookie存在的最大age.具体可以看下面定义CookieLocaleResolver的例子:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">    <property name="cookieName" value="clientlanguage"/>    <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->    <property name="cookieMaxAge" value="100000"></bean>

Table CookieLocaleResolver properties

Property Default Description cookieName classname + LOCALE cookie的名称 cookieMaxAge Integer.MAX_INT cookie储存在客户端的最大时间,如果值为-1表示cookie可以获取到直到客户端关闭 cookiePath / 限制Cookie的网站的某些部分可见性,cookiePath被指定时,Cookie只能看到它下面路径和路径。

4、SessionLocaleResolver

SessionLocaleResolver允许你检查来自session(关联用户请求)的LocaleTimeZone。相对于CookieLocaleResolver,这个策略存储会选择在本地设置Servlet容器的HttpSession中的Locale。因此,这些设置为每个会话,因此只是会话终止时失去。

注意,与外部session管理机制没有直接的关系,例如Spring session project.SessionLocaleResolver.对当前HttpServletRequest这个SessionLocaleResolver将简单的评估和修改相应的HttpSession属性。

5、LocaleChangeInterceptor

对于一个处理程序映射你使用添加LocaleChangeInterceptor来改变locale.它将请求中检测参数,改变locale.它将会调用存在于context中的LocaleResolver中的setLocale()方法。下面的这个例子表示调用所有的*.view资源包含siteLanguage参数将会改变locale。例如,页面请求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>

因为水平有限,翻译不足之处还望见谅。
原文地址:spring-framework-reference-4.2.6.RELEASE

0 0
原创粉丝点击