LocaleChangeInterceptor spring动态改变当地语言
来源:互联网 发布:数控编程圆弧怎么编程 编辑:程序博客网 时间:2024/05/22 00:50
(转)LocaleChangeInterceptor spring动态改变当地语言
spring MVC之解析用户区域
为了让web应用程序支持国际化,必须识别每个用户的首选区域,并根据这个区域显示内容。
在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须实现LocaleResolver接口。Spring MVC提供了几个LocaleResolver实现,让你可以按照不同的条件来解析区域。除此之外,你还可以实现这个接口,创建自己的区域解析器。
要定义一个区域解析器,只需在web应用程序上下文中注册一个LocaleResolver类型的Bean就可以了。你必须将区域解析器的Bean名称设置为localeResolver,这样DispatcherServlet才能自动侦测到它。请注意,每DispatcherServlet只能注册一个区域解析器。
1.按HTTP请求头部解析区域
Spring采用的默认区域解析器是AcceptHeaderLocaleResolver。它通过检验HTTP请求的accept-language头部来解析区域。这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定。请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。
2.按会话属性解析区域
解析区域的另一种方法是通过SessionLocaleResolver。它通过检验用户会话中预置的属性来解析区域。如果该会话属性不存在,它会根据accept-language HTTP头部确定默认区域。
<bean id="localeResolver" class="org.springframewrok.web.servlet.i18n.SessionLocaleResolver"><property name="defaultLocale" value="en"/></bean>
如果会话属性不存在,可以为这个解析器设置defaultLocale属性。请注意,通过修改保存该区域的会话属性,这个区域解析器可以改变用户的区域设置。
3.按Cookie解析区域
你也可以检验用户浏览器中的Cookie,用CookieLocaleResolver来解析区域。如果Cookie不存在,它会根据accept-language HTTP头部确定默认区域。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
这个区域解析器所采用的Cookie可以通过cookieName和cookieMaxAge属性进行定制。cookieMaxAge属性表示这个Cookie应该持续多少秒,-1表示这个Cookie在浏览器关闭之后就失效。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"><property name="cookieName" value="language"/><property name="cookieMaxAge" value="3600"/><property name="defaultLocale" value="en"/></bean>
如果用户浏览器中不存在该Cookie,你也可以为这个解析器设置defaultLocale属性。通过修改保存该区域的Cookie,这个区域解析器能够改变用户的区域。
4.修改用户的区域
除了显式调用LocaleResolver.setLocale()来修改用户的区域之外,还可以将LocaleChangeInterceptor拦截器应用到处理程序映射中,它会发现当前HTTP请求中出现的特殊参数。其中的参数名称可以通过拦截器的paramName属性进行自定义。如果这种参数出现在当前请求中,拦截器就会根据参数值来改变用户的区域。
<beans...>...<bean id="localeChangeInterceptor"class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"><property name="paramName" value="language"/></bean><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="interceptors"><list>...<ref bean="localeChangeInterceptor"/></list></property></bean><bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"><property name="interceptors"><list>...<ref bean="localeChangeInterceptor"/></list></property></bean><beans>
LocaleChangeInterceptor只能为启用了它的那些处理程序映射侦测参数。因此,如果web应用程序上下文中配置了不止一个处理程序映射,就必须在所有处理程序映射中注册这个拦截器,以便能在任意URL中改变它们的区域设置。
现在,利用language参数,可以通过任意URL修改用户的区域。例如,下面两个URL分别将用户的区域语言改成了美式英语和德语。
http://localhost:8080/court/welcome.htm?language=en_UShttp://localhost:8080/court/welcome.htm?language=de
==================================================================================
springMVC的本地化和国际化
spring框架的大部分都支持国际化,就像springMVC一样。DispatcherServlet使你能够动态的通过客户端的本地语言进行配置。这是通过LocaleResolver完成的。
当一个请求到达,DispatcherServlet就会寻找LocaleResolver,如果找到就会试图通过它进行本地化。通过RequestContext.getLocale()方法我们可以得到locale resolver解释的本地化语言。
Locale resolvers和拦截器定义在org.springframework.web.servlet.i18n包中,并且可以在application context中进行配置。下面是本地化解析器的配置部分。
一、AcceptHeaderLocaleResolver
这个Locale resolvers依据 accept-language请求头信息进行解析处理,通常这个头信息包含客户端操作信息的本地标示。
二、CookieLocaleResolver
这个解析器通过cookie寻找客户端特定的语言信息。如果找到,则使用这个配置。使用这个Locale resolvers的一些属性,我们可以指定这个cookie的名称甚至是最大存活时间。下面是一个配置实例:
e.g.
<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>
下面是CookieLocaleResolver的属性列表
property default description
cookieName classname+LOCAL cookie的名称
cookieMaxAge Integer.MAX_INT 最大存活时间
cookiePath / 限制可以访问cookie的程序路径。
三、 SessionLocaleResolver
这个解析器允许你通过session解析本地设置。
四、LocaleChangeInterceptor
通过配置LocaleChangeInterceptor,我们可以动态改变本地语言。它会检测请求中的参数并且改变地区信息。它调用LoacalResolver.setLocal()进行配置。下面的例子显示了,调用所有的*.view资源包含一个名字叫做siteLanguage的变量,来改变地区信息。所以下面的URL:http://www.sf.net/home.view?siteLanguage=nl 将会改变站点语言为荷兰语。
e.g.
<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 spring动态改变当地语言
- Android动态改变应用程序语言
- 动态改变Spring定时任务执行频率
- 动态改变spring定时任务执行频率
- spring动态执行语言beanshell
- 当地日期和时间命名存储及多维动态数组
- spring动态改变数据源(与ibitas整合)
- spring定时执行频率动态改变(个人备份)
- read-Atleap-2-动态改变页面显示语言
- 动态改变MessageBox的按钮文本的语言
- 5.4 蓝图可以改变吗? ——动态语言
- Spring MVC国际化,动态设置默认语言
- 动态改变Cron表达式,来实现动态执行Spring定时任务
- Quartz动态改变Cron表达式,来实现动态执行Spring定时任务
- spring mvc表单中集合类型的参数绑定,含集合下标动态改变
- struts2通过ajax动态改变系统后台的语言来达到国际化页面切换的功能
- 动态改变自定义组件!
- 动态改变应用程序名称
- python介绍
- 每日一得--hibernate高级查询笔记
- java开发之准备知识
- 【CF 698B】Fix a Tree(dfs)
- arm堆栈的增长方式
- LocaleChangeInterceptor spring动态改变当地语言
- 用apache-cxf生成webservice客户端的时候报错Parameter: shead already exists for method
- 模拟底部弹出小菜单
- Git入门(4)-版本回退
- hdu 5179 beautiful number(打表,数位DP)
- 解决时数据库间格式的问题
- 递推算法(1)
- iText生成pdf中文字体解决方案
- python学习——使用模板