Spring MVC(8):本地化解析器

Spring MVC 本地化解析器

默认情况下,Spring MVC 会根据客户端的请求头的 Accept-Language 参数判断客户段的本地化类型,此外 Spring MVC 还提供了多种指定客户端本地化类型的方式,如通过 Cookie、Session 、请求URL参数等;

Spring MVC 本地化解析器和拦截器都定义在 org.springframework.web.servlet.i18n 包中,可以在 DispatcherServlet 上文中配置他们;

Spring 提供了以下4个本地化解析器:
  • AcceptHeaderLocaleResolver:根据 HTTP 报文头的 Accept-Language 参数确定本地化类型,为默认本地化解析器;
  • CookieLocaleResolver:根据指定的 Cookie 值确定本地化类型;
  • SessionLocaleResolver:根据指定的 Session 值确定本地化类型;
  • LocaleChangeInterceptor:从请求中获取本次请求对应的本地化类型;

以上4个解析器中,在默认没有配置本地化解析器的情况下,Spring 会自动注册一个  AcceptHeaderLocaleResolver 解析器;

CookieLocaleResolver

使用Cookie保存本地化信息,只需要在 spring-mvc 配置文件中配置一个 CookieLocaleResolver 即可,DispatcheServlet 会自动识别本地化解析器并装配它:
 
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
      p:cookieName="clientLanguage"    
      p:cookieMaxAge="100000"        
      p:cookiePath="/"               
      p:defaultLocale="zh_CN"/>

SessionLocaleResolver

SessionLocaleResolver 会查找 Session 中属性名为 SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME 的属性,并将其转换为 Locale 对象,以此作为客户端的本地化类型;
使用该本地化解析器,只需要将 SessionLocaleResolver 的配置添加到 spring-mvc 的配置文件中即可:
 
<bean id="lcoaleResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
SessionLocaleResolver 和 CookieLocaleResolver 的区别在于,前者一般要求用户登陆后生产相应的用户会话才会有效,后者只要浏览器存在相应的 cooike 即可生效;

LocaleChangeInterceptor

很多国际型的网站都可以通过一个请求参数控制网站的国际化,如:”www.xxxx.com?lcoale=zh_CN“,” www.xxxx.com?lcoale=en_US“,可以使用 LocaleChangeInterceptor 解析器来实现;
在 spring-mvc 配置文件中配置该解析器如下:
 
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
      p:cookieName="clientLanguage"   
      p:cookieMaxAge="100000"        
      p:cookiePath="/"               
      p:defaultLocale="zh_CN"/>
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
由于 LocaleChangeInterceptor 主要是请求中获取本地化参数并设置给真正的本地化解析器,所以在配置  LocaleChangeInterceptor  之前,必须先配置一个本地化解析器,该解析器只能为 CookieLocaleResolver 或 SessionLocaleResolver (AcceptHeaderLocaleResolver 无法被动态更改本地化信息,所以不能使用);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值