1、 版本 Spring 3.1
2、 配置 LocaleResolver
LocaleResolver 是指用什么策略来检测请求是哪一种Local, Spring 提供以下几种策略:
2.1、AcceptHeaderLocaleResolver
根据浏览器Http Header中的accept-language域判定(accept-language域中一般包含了当前操作系统的语言设定,可通过HttpServletRequest.getLocale方法获得此域的内容)。 改变Local 是不支持的,即不能调用LocaleResolver接口的 setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale); 方法设置Local.
2.2、SessionLocaleResolver
根据用户本次会话过程中的语言设定决定语言种类(如:用户登录时选择语言种类,则此次登录周期内统一使用此语言设定)。
2.3、CookieLocaleResolver
根据Cookie判定用户的语言设定(Cookie中保存着用户前一次的语言设定参数)。
2.4、FixedLocaleResolver 一直使用固定的Local, 改变Local 是不支持的 见(2.1)
如果需要使用哪一种策略,只需在DispatcherServlet 指定的Spring配置文件中配置就行, 例如需要使用CookieLocalResolver , 在配置文件如下配置:
<
bean
id
=
"localeResolver"
class
=
"org.springframework.web.servlet.i18n.CookieLocaleResolver"
></
bean
>
DispatchServlet 将在初始化的时候, 会调用initLocaleResolver(context) 方法去配置文件中找名字为“localeResolver"
bean. 如果有就用配置文件配置的localResolver. 如果没有配置将用默认的localResolver "
AcceptHeaderLocaleResolver".
3、使用Spring MVC时, controller如何得到请求的 Local
DispatchServlet 会在 processRequest(HttpServletRequest request, HttpServletResponse response) 方法中设置LocaleContext, 把LocalContext 和当前线程关联起来. 代码如下:
LocaleContextHolder.setLocaleContext
(buildLocaleContext(request),
this.
threadContextInheritable
);
DispatchServlet 中buildLocalContext代码如下:
protected
LocaleContext buildLocaleContext(
final
HttpServletRequest request) {
return
new
LocaleContext() {
public
Locale getLocale() {
return
localeResolver
.resolveLocale(request);
}
@Override
public
String toString() {
return
getLocale().toString();
}
};
}
这里的Local通过localResolver 解析得到, localResolver 即是从Spring 配置文件配置的localResolver, 默认是"AcceptHeaderLocaleResolver".
如果你想要在 controller 中得到当前请求的Local, 代码可以如下写:
Locale locale = LocaleContextHolder.getLocale();
或者你可以用Spring 中的RequestContextUtils 类方法getLocal得到 request 中保存的localResolver, 并用localResolver 解析得到Local. 代码如下:
public
static
Locale getLocale
(HttpServletRequest
request) {
LocaleResolver
localeResolver = getLocaleResolver
(request);
if
(localeResolver !=
null
) {
return
localeResolver.resolveLocale(request);
}
else
{
return
request.getLocale();
}
}
localResolver 会在DispatcherServlet的doService 方法中,将localResolver保存到request 属性中 代码如下:
request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver);
4、LocaleChangeInterceptor 的使用:
如果想要用户能改变Local, 我们需要配置 LocaleChangeInterceptor, 这个拦截器将检查传入的请求,如果请求中有“local" 的参数(参数可以配置),如http://localhost:8080/test?local=zh_CN. 该Interceptor将使用localResolver改变当前用户的
Local, 代码如下:
String
newLocale = request.getParameter(
this
.
paramName
);
if
(newLocale !=
null
) {
LocaleResolver
localeResolver = RequestContextUtils.getLocaleResolver
(request);
if
(localeResolver ==
null
) {
throw
new
IllegalStateException(
"No LocaleResolver found: not in a ..."
);
}
//改变当前的Local
localeResolver.setLocale
(request,
response, StringUtils.parseLocaleString
(newLocale));
}
要使得LocaleChangeInterceptor 有效果,在Spring 的配置文件加入即可:
<
mvc:interceptors
>
<
bean
class
=
"org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/
>
</
mvc:interceptors
>
分享到:
相关推荐
Spring MVC 国际化的配置方法及使用,希望能对大家的学习、工作有帮助。
6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求案例 9.Spring MVC RESTful 风格的请求方式案例 10.Spring + Spring MVC + JDBCTemplate 整合并通过 RESTful ...
采用spring技术 实现项目中英文切换 国际化
包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。 当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。(例如: org.springframework.web....
只要有了这个配置,然后配置JSP渲染器为JSTL支持的,那么在你的JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。 如:<fmt:message key="info.login.title" /> 其中的info.login.title和你的资源文件对应
springmvc使用注解的方式,进行国际化。
背景Spring MVC 的国际化是建立在Java国际化的基础之上的,其一样也是通过提供不同国家语言环境的消息资源,然后通过 Resource Bundle 加
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...
Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,主要用于实现MVC设计模式的Web框架。它分离了控制器、模型对象、过滤器以及处理程序...此外,Spring MVC还支持本地化/国际化(Locale)解析及文件上传等。
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...
本篇文章主要介绍了Spring MVC的国际化实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
国际化支持 WebWork2 & Spring Quick Start WebWork 高级特性 Action 驱动模式 XWork 拦截器体系 输入校验 国际化支持 Webwork2 in Spring Struts in Spring 数据持久层 事务管理 持久层封装 JDBC ...
11.1 Spring MVC概述 Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。 11.1 Spring MVC概述 是Spring框架的一...
包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件...
Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring ...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 ...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 4.2. ...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...