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>