在实际的生产环境中,我们经常会使用国际化,我们使用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; }