Spring MVC Locale 本地化示例详解
通过RequestContext.getLocale()获取到对应的Locale
Spring各模块都支持国际化,SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。
request请求上来后,DispatcherServlet查找并设置Locale Resovler,我们可以通过RequestContext.getLocale()获取到对应的Locale。
此外,可以利用拦截器在特定情况下修改locale,比如,根据请求参数修改locale。这项功能对于通过页面选项指定locale的应用非常有用(比如在页面上选择中文/英文的方式指定应用的语言)。
Locale Resolver和拦截器定义在org.springframework.web.servlet.i18n包,可以通过配置文件指定,Spring支持如下locale resolver:
- Time Zone
- Header Resolver
- Cookie Resovlver
- Session Resolver
- Locale Interceptor
Time Zone
除获取用户locale之外,有时候也需要获取到用户的时区,LocaleContextResolver接口通过扩展LocaleResovler可提供对时区的支持。
可通过RequestContext.getTimeZone() 获取用户时区。
Header Resolver
Header Resolver通过解析请求头的accept-language,从而获取到客户端浏览器发送上来的相关头信息。
SpringMVC提供的Header Resolver:AcceptHeaderLocaleResolver。
浏览器默默认会发送相关的请求头信息:
SpringMVC通过DispatcherServlet.properties指定的默认LocaleResolver正是Header Resolver:
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
Cookie Resolver
检查客户端发送上来的请求的cookie中是否包含Locale或TimeZone信息,如包含则应用该信息创建Locale。
SpringMVC提供的Cookie Resolver:org.springframework.web.servlet.i18n.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>
Session Resolver
SessionLocaleResolver通过session获取客户端的Locale和TimeZone信息,信息存储在HttpSession中,随着session的失效而失效。
Locale Interceptor
使用拦截器、通过页面参数设置Locale。SpringMVC提供了一个LocaleChangeInterceptor拦截器,可以直接使用。
比如:
<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>
配置localeChangeInterceptor,指定其参数名称为siteLanguage,将该拦截器配置到SimpleUrlHandlerMapping上,对*.view请求,根据请求参数siteLanguage决定其locale。
以上就是Spring MVC Locale 本地化示例详解的详细内容,更多关于Spring MVC Locale 本地化的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot整合Swagger和Actuator的使用教程详解
Swagger 是一套基于 OpenAPI 规范构建的开源工具,可以帮助我们设计、构建、记录以及使用 Rest API。本篇文章主要介绍的是SpringBoot整合Swagger(API文档生成框架)和SpringBoot整合Actuator(项目监控)使用教程。感兴趣的朋友一起看看吧2019-06-06Spring实战之XML与JavaConfig的混合配置详解
大家都知道Spring的显示配置方式有两种,一种是基于XML配置,一种是基于JavaConfig的方式配置。那么下这篇文章主要给大家分别介绍如何在JavaConfig中引用XML配置的bean以及如何在XML配置中引用JavaConfig,需要的朋友可以参考下。2017-07-07
最新评论