Spring 国际化(i18n) 不能选择语言
参照 http://viralpatel.net/blogs/spring-3-mvc-internationalization-i18n-localization-tutorial-example/ 配置spring 国际化:
<!-- 配置语言拦截器,语言选择参数名称 lang -->
<bean id="localeChangeInterceptor">
<property name="paramName" value="lang" /> </bean>
<!-- 本地默认语言环境 -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="zh_CN" />
</bean>
<!-- 国际化配置 结束 -->
<bean id="handlerMapping">
<property name="interceptors"> <ref bean="localeChangeInterceptor" />国际化选择拦截器
</property> <property name="order"> <value>1</value> </property> </bean>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean>
<constructor-arg value="UTF-8" />
</bean>
<!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prettyPrint" value="true" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
由于 使用了<mvc:annotation-driven>,会覆盖xml中配置的LocaleChangeInterceptor,导致无法选择语言环境。 解决方法: 增加配置
<!-- 由于<mvc:annotation-driven>会覆盖 LocaleChangeInterceptor配置--> <mvc:interceptors>
<bean>
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
去掉原 LocaleChangeInterceptor的配置。 URL 后加?lang=en ,正确切换到en环境。问题解决。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 陈大雷的 Blog