spring 国际化

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.

  1. <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">  
  2.   
  3.     <property name="cookieName" value="clientlanguage"/>  
  4.      
  5.     <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->  
  6.     <property name="cookieMaxAge" value="100000">  
  7.   
  8. </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.

  1.  <bean id="localeChangeInterceptor"  
  2.       class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">  
  3.     <property name="paramName" value="siteLanguage"/>  
  4. </bean>  
  5.   
  6. <bean id="localeResolver"  
  7.       class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>  
  8.   
  9. <bean id="urlMapping"  
  10.       class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  11.     <property name="interceptors">  
  12.         <list>  
  13.             <ref bean="localeChangeInterceptor"/>  
  14.         </list>  
  15.     </property>  
  16.     <property name="mappings">  
  17.         <value>/**/*.view=someController</value>  
  18.     </property>  
  19. </bean>  


<bean id="messageSource"  
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
        <property name="basenames">  
            <list>  
                <value>WEB-INF/lang/props/addr</value>  
            </list>  
        </property>  
    </bean>
<bean id="localeResolver" class="com.ad.web.common.CookieLocalResolverUtil">
<property name="defaultLocale" value="zh_CN"/>
        <property name="cookieName" value="lang"/>
        <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->
        <property name="cookieMaxAge" value="-1"/>
</bean>


public class CookieLocalResolverUtil extends CookieLocaleResolver{
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        // Check request for pre-parsed or preset locale.
        Locale locale = (Locale) request.getAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME);
        if (locale != null) {
            return locale;
        }

        // Retrieve and parse cookie value.
        Cookie cookie = WebUtils.getCookie(request, getCookieName() + request.getParameter(CommonConst.SID));
        if (cookie != null) {
            locale = StringUtils.parseLocaleString(cookie.getValue());
//            if (logger.isDebugEnabled()) {
//                logger.debug("Parsed cookie value [" + cookie.getValue() + "] into locale '" + locale + "'");
//            }
            if (locale != null) {
                request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale);
                return locale;
            }
        }

        return determineDefaultLocale(request);
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        if (locale != null) {
            // Set request attribute and add cookie.
            request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale);
            addCookie(response, locale.toString());
        }
        else {
            // Set request attribute to fallback locale and remove cookie.
            request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, determineDefaultLocale(request));
            removeCookie(response);
        }
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值