在Spring的国际化配置中,一共有三种描述方式:
第一种:AcceptHeaderLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"> </bean>
默认的参数名为locale主意大小写。里面放的就是你的提交参数。如:en_US,zh_CN之类的,这个时候,你在页面上加一句<a href="?locale=zh_CN">简体中文</a>
第二种:Session
Session的配置如下:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
在你的处理的Controller中,将提交上来的locale字段信息生成真正的Locale对象,然后将对象保存在Session中,默认保存的ID是SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME
这样,当你的Session不过期,那么语言种类始终保持正确的说。我一直是这样子用的,我觉得还是Session的好,老外们用了很满意。
第三种:
基于Cookie的国际化配置
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
这三种方式都可以解决国际化的问题,
对应的拦截方式:
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
在mapping url映射的时候,可以调用这个属性来跳转的时候,进行国际化的拦截。
不过我在使用国际化的时候,没有使用这个拦截方法。
另外最重要的地方,是在调用spring的message的标签。
在Spring MVC中使用<spring:message code="title"/>这样的标签来显示,但是Velocity中用这个方法就读不到值,翻了一天资料才搞定这个问题,使用#springMessage("title") 这种方式就可以解决问题。
另外需要注意调用Spring.tld,不然标签无法识别。
<%@ taglib prefix="spring" uri="/WEB-INF/spring.tld"%>
总算折腾完国际化的问题了。继续研究关于Controller和MultiActionController