SpringMVC 国际化步骤
- 给系统加载国际化资源文件。
- 输出国际化。SpringMVC 输出国际化消息有两种方式:
- 在视图页面上输出国际化消息,需要使用 SpringMVC 的标签库;
- 在 Controller 的处理方法中输出国际化消息,需要使用 org.springframework.web.servlet.support.RequestContext 的 getMessage() 方法来完成。
messageSource
在 SpringMVC 中,并不直接使用 ResourceBundle,而是利用 messageSource bean 告诉 SpringMVC 要将属性文件保存在哪里:1
2
3
4
5
6
7<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message</value>
</list>
</property>
</bean>
basenames 属性用来指定国际化的属性文件名称
localeResolver
当用户选择语言区域时,最常用的方法是通过读取用户浏览器的 accept-language 标题值。除此之外还可以读取 HttpSession 或者 Cookie。
SpringMVC 提供了一个语言区域解析器接口 LocaleResolver,有如下实现类:
- AcceptHeaderLocaleResolver:默认解析器。
- SessionLocaleResolver
- CookieLocaleResolver
message 标签
在 SpringMVC 中显示本地化消息通常使用 Spring 的 message 标签。1
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
AcceptHeaderLocaleResolver 国际化
AcceptHeaderLocaleResolver 是默认配置,会读取浏览器的 accept-language 标题,来确定使用哪个语言区域。
- 首先要准备资源文件,可以使用 native2asci 命令来处理中文资源文件为 Unicode。
- 接下来在 JSP 页面导入 spring 标签库,并使用 \spring:message 标签来输出国际化信息。
SessionLocaleResolver 国际化
SessionLocaleResolver 不是默认的语言区域解析器,需要对其进行显式配置。其作用是从 HttpSession 作用域中获取用户所设置的语言区域,来确定使用哪个 Locale。1
2
3
4
5
6<mvc:interceptors>
<!-- 国际化操作拦截器如果采用基于 Session/Cookie 则必须配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
<!-- SessionLocaleResolver 配置 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
设置语言环境:1
2Locale locale=new Locale("zh","CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
CookieLocaleResolver 国际化
1 | <mvc:interceptors> |
设置语言环境:1
2Locale locale=new Locale("zh","CN");
(new CookieLocaleResolver()).setLocale(request,response,locale);