一、国际化的方式
1、第一种方式:需要手动调节浏览器的语言
①创建国际化文件:多国语言的多个文件
②注册国际化文件
<!--国际化信息 配置 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n" /><!-- 国际化信息所在的文件名 -->
</bean>
③页面中显示国际化信息:使用key
<fmt:message key="i18n.username"></fmt:message>
<fmt:message key="i18n.password"></fmt:message>
2、第二种方式:无需手动调节浏览器的语言
①直接将ResourceBundleMessageSource作为bean注入,因为ResourceBundleMessageSource已纳入了Spring的容器管理
@Autowired
private ResourceBundleMessageSource messageSource;
②获取国际化Local对应的消息,使用其对应的getMessage方法
@RequestMapping("/i18n2")
public String testi18n2(Locale locale){
String v1 = messageSource.getMessage("i18n.username",null,locale);
String v2 = messageSource.getMessage("i18n.password",null,locale);
System.out.println(v1+"\t"+v2);
return "ok";
}
③修改SpringMVC的xml配置文件新增两个配置:SessionLocaleResolver和LocaleChangeInterceptor
<!-- 配置SessionLocaleResolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
④超链接后跟着请求参数locale=zh_CH 或 locale=en_US实现点击超链接实时切换语言
<a href="${pageContext.request.contextPath}/i18n3?locale=zh_CH">中文</a>
<a href="${pageContext.request.contextPath}/i18n3?locale=en_US">ENGLISH</a>
二、国际化的原理
默认情况下,SpringMVC 会根据Accept-Lanuage参数判断客户端的本地化类型。当接收到请求时,SpringMVC会在上下文中查找一个本地化解析器(LocalResolver),找到后使用它获取请求所对应的本地化类型信息。
SpringMVC还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。