步骤1:applicationContext.xml声明:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="/cn/et/lesson04/resource/I18n"></property>
</bean>
注意:id请使用 'messageSource',Spring容器获取这个对象时默认是以这个名字去获取的,不要乱动哈。basename指的是i18n的资源文件 , value填的是路径 + 配置文件前缀:
只加前缀就好了,zh_CN、en_GB是给程序自己识别的。
2.在控制层中装配MessageSource:
@Autowired
// 自动装配
private MessageSource ms;
@RequestMapping(value = "i18n" , method = RequestMethod.GET)
public String i18n(HttpServletResponse response , Locale locale) throws Exception{
response.setContentType("text/html;charset=UTF-8");
response.getOutputStream().write(ms.getMessage("key", null, locale).getBytes("UTF-8"));
return null;
}
getMessage方法是通过这个MessageSource对象获取properties中的消息,需要三个参数,第一个填消息的key,第二个可以为null,第三个是个Locale,Spring会根据请求头信息中的Accept-Language自动初始化好这个Locale,只需要在参数列表中声明即可。
资源文件:
浏览器中直接访问这个action,因为地区选的是中国(简体中文),输出结果自然是从zh_CN资源文件中获取的:
替换成en_GB:
en_GB是英式英语,美式英语则是en_US,按需求来定。输出结果:
下面做个小例子,国际化登录页面:
1.首先在需要国际化处理的页面中,引入标签库:
2.把需要国际化的地方,用message标签取出的值替换掉:
我在页面上用的是placeholder作为提示,所以直接把标签放在里边了。code属性指向的是国际化资源文件中的键:
重启一下tomcat,刷新页面即可:
将浏览器语言替换成中文,再刷新页面:
OK。
超链接实现国际化:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<!--
MVC本地化拦截器,中间定义localeChangeInterceptor,再定义
paramName,value就是页面超链接中的参数:
${pageContext.request.contextPath}/reg?locale=zh_CN 默认是locale
-->
<mvc:interceptors>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale"></property>
</bean>
</mvc:interceptors>
错误消息国际化:
2.mvc-servlet.xml中实例化验证器,注入messageSource:
3.指定验证器
4.Bean配置:
5.页面声明:
bean初始化默认以类名首字母小写作为bean的名称,如果Controller中没有用ModelAttribute修改过Bean名,直接就用类名小写.验证字段即可。
6.controller:
效果:
英文环境:
OK。