SpringMVC-国际化

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 标题,来确定使用哪个语言区域。

  1. 首先要准备资源文件,可以使用 native2asci 命令来处理中文资源文件为 Unicode。
  2. 接下来在 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
2
Locale locale=new Locale("zh","CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);

CookieLocaleResolver 国际化

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.CookieLocaleResolver"/>

设置语言环境:

1
2
Locale locale=new Locale("zh","CN");
(new CookieLocaleResolver()).setLocale(request,response,locale);