SpringMVC(12) - 使用区域设置

参考:https://docs.spring.io/spring/docs/4.3.20.RELEASE/spring-framework-reference/htmlsingle/#mvc-localeresolver

 

Spring的体系结构的大多数部分都支持国际化,就像Spring Web MVC框架一样。 DispatcherServlet可以使用客户端的区域设置自动解析消息。这是通过LocaleResolver对象完成的。

当请求进入时,DispatcherServlet会查找区域设置解析器,如果找到它,则会尝试使用它来设置区域设置。使用RequestContext.getLocale()方法,始终可以检索由区域设置解析器解析的区域设置。

除了自动locale解析之外,还可以将拦截器附加到处理器映射以在特定情况下更改locale,例如,基于请求中的参数。

Locale解析器和拦截器在org.springframework.web.servlet.i18n包中定义,并以正常方式在应用程序上下文中进行配置。以下是Spring中包含的区域设置解析器的选择。

 

1.  获取时区信息
除了获取客户端的区域外,了解其时区通常也很有用。 LocaleContextResolver接口提供LocaleResolver的扩展,允许解析器提供更丰富的LocaleContext,其中可能包含时区信息。

可以使用RequestContext.getTimeZone()方法获取用户的TimeZone。时区信息将由Spring的ConversionService注册的Date/Time  Converter和Formatter对象自动使用。

 

2. AcceptHeaderLocaleResolver
该区域设置解析器检查客户端(例如,Web浏览器)发送的请求中的accept-language请求头。通常,此请求头字段包含客户端操作系统的区域设置信息。此解析程序不支持时区信息。

 

3. CookieLocaleResolver
此区域设置解析器检查客户端上可能存在的Cookie,以查看是否指定了Locale或TimeZone。如果是,则使用指定的详细信息。使用此区域设置解析器的属性,可以指定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>

CookieLocaleResolver属性

属性默认值描述

cookieName

classname + LOCALE

cookie的名称

cookieMaxAge

Servlet container default

Cookie在客户端上存在的最长时间。 如果指定-1,则不会保留cookie;它只有在客户端关闭浏览器之后才可用。

cookiePath

/

限制cookie对网站某个部分的可见性。 指定cookiePath时,cookie只对该路径及其下方的路径可见。

 

4. SessionLocaleResolver

SessionLocaleResolver允许从可能与用户请求关联的会话中检索Locale和TimeZone。 与CookieLocaleResolver相比,此策略将本地选择的区域设置存储在Servlet容器的HttpSession中。 因此,这些设置对于每个会话来说都是临时的,因此在每个会话终止时都会丢失。

请注意,与Spring Session项目等外部会话管理机制没有直接关系。 此SessionLocaleResolver将简单地针对当前的HttpServletRequest评估和修改相应的HttpSession属性。

 

5. LocaleChangeInterceptor

可以通过将LocaleChangeInterceptor添加到其中一个处理器映射来更改区域设置。 它将检测请求中的参数并更改区域设置。 它在LocaleResolver上调用setLocale(),它也存在于上下文中。

以下示例显示所有请求*.view资源,同时也包含名为siteLanguage的参数时,将更改区域设置。 因此,例如,对以下URL的请求http://www.sf.net/home.view?siteLanguage=nl会将站点语言更改为荷兰语。

<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>

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值