Spring MVC国际化的实现


springMVC的国际化:


1 如何定义资源化文件:基名+语言名


使用拦截器处理国际化的流程
使用拦截器拦截设置语言的请求 
   LocaleChangeInterceptor只对Action执行之前做拦截
   也就是执行LocaleChangeInterceptor的preHandle()
   在这个方法中收集locale的参数值(参数名一定要是locale,不能改变)
   找到localeResolver标识的对象,将locale这个参数的参数值
   设置到用户对应的session上
   交给请求处理器处理 - 后端处理器 - handleRequest()


核心代码实现:

请求:

<a href="chinese.do?locale=zh_CN">简体中文</a>    
    <a href="us.do?locale=en_US">美式英文</a>



Spmvc-context.servlet文件:

<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/chinese.do"/> 
			<mvc:mapping path="/us.do"/>
			<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>		</mvc:interceptor>
  </mvc:interceptors>
  
  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/> 

  
applicationContext.xml文件:
<!-- 定义国际化消息 -->   
  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">   
     <property name="basename" value="messages"/>  
 </bean>  


Spring的国际化标签<spring:message code=""/>标签使用的流程:

举例:<spring:message code="loginSuccess"/>


标签导入taglib:<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>  
找到用户的session
到session找SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME属性,默认这个属性是没有属性值的,因为没有对它进行人为设置。
处理方式是使用浏览器语言信息(一般是zh_CN),将浏览器的语言信息设置到SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME属性上。
再从session取出刚刚设置的语言信息,即SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME的属性值。
到Bean工厂中找出messageSource标识的对象。
取出这个对象的basename属性的属性值message
根据基名和语言信息定位到国际化资源文件
找到spring标签中code="loginSuccess"的值,最后输出。




注意三个标识不能变:
1. 不能改变语言请求的参数
<a href="chinese.do?locale=zh_CN">简体中文</a> 
<a href="us.do?locale=en_US">美式英文</a>


2 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>,其中的 id="localeResolver"不能改变。
注意:源码SessionLocaleResolver类中有LOCALE_SESSION_ATTRIBUTE_NAME属性;
LocaleResolver是一个接口。
localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());设置到session中


3 application-context.xml中
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">   
     <property name="basename" value="messages"/>  
 </bean>   
id="messageSource" 不能改变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值