Spring MVC 国际化
国际化概述
- 默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型。
- 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(LocalResolver),找到后使用它获取请求 所对应的本地化类型信息。
- SpringMVC 还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。
SessionLocaleResolver & LocaleChangeInterceptor 工作原理
资源文件
i18n.properties
i18n.username=username
i18n.password=password
i18n_zh_CH.properties
i18n.username=用户名
i18n.password=密码
i18n_en_US.properties
i18n.username=Username
i18n.password=Password
<a href="i18n?locale=zh_CH">中文</a>
<br>
<br>
<a href="i18n?locale=en_US">英文</a>
@RequestMapping("/i18n")
public String testI18n(Locale locale) {
String val = messageSource.getMessage("i18n.user", null, locale);
System.out.println(val);
return "i18n";
}
本地化解析器和本地化拦截器
- AcceptHeaderLocaleResolver:根据 HTTP 请求头的Accept-Language 参数确定本地化类型,如果没有显式定义本地化解析器, SpringMVC 使用该解析器。
- CookieLocaleResolver:根据指定的 Cookie 值确定本地化类型
- SessionLocaleResolver:根据 Session 中特定的属性定本地化类型
- LocaleChangeInterceptor:从请求参数中获取本次请求对应的本地化类型。
<!-- 配置 SessionLocalResolver -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<!-- 配置 LocaleChanceInterceptor -->
<bean
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>