天天看点

spring mvc i18n设置

在实际的生产环境中,我们经常会使用国际化,我们使用spring mvc设置i18n。
  • spring-mvc.xml
    <!-- 国际化支持 -->
    <mvc:interceptors>  
        <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  
    </mvc:interceptors>
        <bean id="localeResolver"
            class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
        <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>/config/i18n/system</value>
                    <value>/config/i18n/messages</value>
                    <value>/config/i18n/model</value>
                </list>
            </property>
            <property name="useCodeAsDefaultMessage" value="true"/>
            <property name="cacheSeconds" value="5"/><!-- 资源刷新间隔时间 -->
        </bean>
               
  • Controller代码
    /**
     * 设置当前session的语言
     * [zh/en]
     * @param request
     * @return
     */
    protected void  setSessionLocal(HttpServletRequest request,String langType){
         Locale locale;
         if(langType.equals("zh")){
             locale = new Locale("zh", "CN"); 
             request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
         }
         else if(langType.equals("en")){
             locale = new Locale("en", "US"); 
             request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
         }
         else {
            locale=LocaleContextHolder.getLocale();
            request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
         }
         //设置session_locale
         request.getSession().setAttribute(CwsConstants.SESSION_LOCALE_KEY, CwsUtils.isNotNull(langType)?langType:CwsConstants.SESSION_LOCALE_KEY_DEFALUT);
    }
    
    /**
     * 是否已经设置语言参数
     * @param request
     * @return
     */
    protected boolean isSetSessionLocal(HttpServletRequest request){
        HttpSession session =request.getSession();
        Locale local =(Locale) session.getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
        String langType =  (String) session.getAttribute(CwsConstants.SESSION_LOCALE_KEY);
        if(CwsUtils.isNotNull(langType) && local!=null){
            return true;
        }else{
            return false;
        }
    }
    
    
    /**
     * 获取值从i18n中
     * @param request
     * @return
     */
    protected final String getI18nValue(HttpServletRequest request,String key){
        RequestContext requestContext = new RequestContext(request);
        return requestContext.getMessage(key);
    }
    
    /**
     * 获取当前local值,主要用于菜单国际化[en/zh]
     * @param request
     * @return
     */
    protected final String getI18nLocale(HttpServletRequest request){
        HttpSession session =request.getSession();
        Locale local =(Locale) session.getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
        String langType =  (String) session.getAttribute(CwsConstants.SESSION_LOCALE_KEY);
        if(CwsUtils.isNotNull(langType) && local!=null){
            return langType;
        }else
            return CwsConstants.SESSION_LOCALE_KEY_DEFALUT;
    }
               

继续阅读