zoukankan      html  css  js  c++  java
  • 使用Spring MVC 实现 国际化


    使用Spring MVC 实现 国际化

        博客分类: Spring

     

    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 >


  • 相关阅读:
    SharePoint Framework (SPFx) 开发入门教程
    SharePoint 2013 Designer 入门教程
    SharePoint 2013 开发教程
    SharePoint 2013 入门教程
    SharePoint Online 部署SPFx Web部件
    SharePoint Online SPFx Web部件绑定数据
    SharePoint Online 创建SPFx客户端Web部件
    SharePoint Online 配置框架(SPFx)开发环境
    SharePoint Online 创建应用程序目录
    SharePoint Online 启用 IRM
  • 原文地址:https://www.cnblogs.com/wlf-919874006/p/4811306.html
Copyright © 2011-2022 走看看