`
zhoujian1982318
  • 浏览: 35373 次
  • 性别: 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 国际化 spring mvc

    本文将详细介绍如何使用 Spring MVC 实现国际化。 国际化的重要性 在全球化的今天,国际化变得越来越重要。随着应用程序的全球化,国际化变得非常必要。国际化可以让我们的应用程序适应不同语言和地区,提高应用...

    Spring mvc 国际化

    3. 使用RequestContext的getMessage方法:在Spring MVC的Controller中,可以使用RequestContext的getMessage方法来获取对应的国际化文本。例如,在Controller中可以根据当前用户的语言设置,获取"welcome"对应的文本...

    spring mvc 国际化 demo

    3. **使用注解实现国际化** Spring MVC提供了`@MessageSource`注解,可以方便地在控制器方法中获取本地化消息。首先,你需要在控制器类上添加`@Controller`注解,然后在方法上使用`@RequestMapping`注解来处理请求...

    spring mvc配置国际化

    在Spring MVC框架中,实现国际化是一项重要的功能,它允许应用程序为不同的地区和语言提供本地化的显示内容。本实例将向您展示如何轻松配置Spring MVC以支持国际化。首先,我们需要了解几个核心概念: 1. **资源...

    spring mvc 3 国际化(下)——简单自定义操作

    在Spring MVC 3中,国际化是一项重要的功能,它允许我们为不同的地区和语言提供定制的显示内容。在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的...

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

    通过深入了解Spring MVC国际化背后的原理,包括`ResourceBundleMessageSource`的工作机制以及`Locale`的处理方式,开发者可以更好地设计和实现多语言支持的Web应用。这不仅增强了用户体验,也为全球范围内的用户提供...

    Spring MVC 4.2.3

    10. **国际化和本地化**:通过消息源和LocaleResolver,Spring MVC可以轻松实现应用的多语言支持。 在实际开发中,我们可以通过Maven或Gradle等构建工具将Spring MVC 4.2.3依赖引入项目。同时,使用IDE如IntelliJ ...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    国际化和本地化则可以通过消息源(MessageSource)来实现,为不同地区提供不同的显示内容。 在实际开发中,Spring MVC常常与Spring Data JPA或MyBatis等持久层框架结合使用,以方便数据库操作。此外,Spring MVC还...

    spring mvc 4.0

    10. **国际化支持**:通过消息源(MessageSource)和LocaleResolver,Spring MVC提供了强大的国际化支持,能够根据用户语言环境展示不同的内容。 11. **错误处理**:通过@ControllerAdvice和@ExceptionHandler,...

    spring mvc jar包

    ApplicationContext 是 Spring 中的核心接口,它负责管理 Bean 的生命周期和依赖注入,同时提供事件发布和国际化等功能。 2. `org.springframework.beans-3.0.2.RELEASE.jar`:这个库包含 Bean 工厂(BeanFactory)...

    spring MVC .docx

    15. **Internationalization (i18n) and Localization (l10n)**: Spring MVC提供对国际化和本地化的支持,允许根据不同地区展示不同的内容。 总的来说,Spring MVC为开发高效、灵活和可扩展的Web应用程序提供了强大...

    Spring MVC 4.2.4.RELEASE 中文文档

    Spring MVC提供国际化功能,允许根据用户的语言偏好显示不同语言的内容。 由于这是一个非正式版本,可能存在一些已知问题或未记录的特性。尽管如此,这份中文文档可以帮助开发者理解Spring MVC的基本概念和使用方法...

    spring MVC_快速入门

    11. **国际化和主题** Spring MVC支持多语言和主题切换,通过LocaleResolver和ThemeResolver实现。 12. **测试** Spring MVC提供了MockMvc工具,可以在不启动服务器的情况下进行单元测试和集成测试。 这个...

    spring mvc 整合包

    12. **MessageSource**:处理国际化和本地化,提供多语言支持。 13. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局处理异常,提供统一的错误页面。 14. **RESTful风格**: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 MVC Cookbook(PACKT,2016).pdf

    10. **国际化与本地化**:学习如何根据用户的语言和地区提供不同的内容,包括资源文件的配置和LocaleResolver的使用。 11. **Ajax集成**:与JavaScript库(如jQuery)集成,实现异步请求和更新页面部分内容。 12. ...

    Spring MVC 学习记录总结1

    Spring MVC 是一个广泛使用的 Java Web 开发框架,它实现了MVC(Model-View-Controller)设计模式,使得开发者可以更高效地构建可维护且松耦合的Web应用程序。在这个学习记录总结中,我们将深入理解Spring MVC的核心...

    Spring mvc5.0.3 所有jar包

    以上只是Spring MVC 5.0.3中的一部分关键特性,实际上还有许多其他功能和优化,如国际化、缓存、上传文件等,都极大地提高了开发效率和应用程序的可维护性。在实际项目中,理解并熟练掌握这些知识点,将有助于构建出...

Global site tag (gtag.js) - Google Analytics