`
zhoujian1982318
  • 浏览: 35182 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Spring MVC 实现 国际化

 
阅读更多

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 国际化

    Spring MVC 国际化的配置方法及使用,希望能对大家的学习、工作有帮助。

    SpringMVCDemo:Spring MVC 框架知识案例

    6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求案例 9.Spring MVC RESTful 风格的请求方式案例 10.Spring + Spring MVC + JDBCTemplate 整合并通过 RESTful ...

    spring 国际化 spring mvc

    采用spring技术 实现项目中英文切换 国际化

    spring-webmvc5.3.6 jar包.rar

    包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。  当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。(例如: org.springframework.web....

    Spring2.5的国际化配置

    只要有了这个配置,然后配置JSP渲染器为JSTL支持的,那么在你的JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。 如:&lt;fmt:message key="info.login.title" /&gt; 其中的info.login.title和你的资源文件对应

    spring mvc 国际化 demo

    springmvc使用注解的方式,进行国际化。

    10 扩展之Spring MVC中如何实现国际化i18n慕课专栏1

    背景Spring MVC 的国际化是建立在Java国际化的基础之上的,其一样也是通过提供不同国家语言环境的消息资源,然后通过 Resource Bundle 加

    Spring MVC 3.0实战指南.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,主要用于实现MVC设计模式的Web框架。它分离了控制器、模型对象、过滤器以及处理程序...此外,Spring MVC还支持本地化/国际化(Locale)解析及文件上传等。

    Spring3MVC注解教程.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...

    Spring MVC的国际化实现代码

    本篇文章主要介绍了Spring MVC的国际化实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring开发指南

    国际化支持 WebWork2 & Spring Quick Start WebWork 高级特性 Action 驱动模式 XWork 拦截器体系 输入校验 国际化支持 Webwork2 in Spring Struts in Spring 数据持久层 事务管理 持久层封装 JDBC ...

    基于java的企业级应用开发:Spirng MVC入门.ppt

    11.1 Spring MVC概述 Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。 11.1 Spring MVC概述 是Spring框架的一...

    spring4.3.9相关jar包

    包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件...

    spring4.3.2参考文档(英文)

    Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring ...

    Spring 2.0 开发参考手册

    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. 简介 ...

    Spring中文帮助文档

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

    Spring-Reference_zh_CN(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. ...

    Spring API

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

Global site tag (gtag.js) - Google Analytics