浅谈SpringMVC国际化

最近应国际部邀请,对Portal进行国际化,因泰国、马来西亚等好几个国家之某部对Portal产生了浓厚的兴趣。今天呢,我将这几天所学、所做总结一下。

Portal主要使用的是SpringMVC+MyBatis,其他的不做说明。主要说国际化部分。

一、国际化背景说明

面向全球化时代,需要在不同语言的国家和地区部署应用系统,这就是国际化的前提。

i18n:是国际化的缩写,那具有什么意义呢,因为internationalization太长了,编程不方便,不美观也不好记,所以以首字母i和结尾子母n,以及中间有18个子母缩写成了i18n。

l10n:是本地化的缩写,全拼为localization,原理同国际化。

二、SpringMVC国际化

1、SpringMVC国际化首先需要需要形成一个属性文件。然后选择和读取特定于用户语言区域的属性即可,而选择和读取就要依托于java.util.ResourceBundle类了。

ResourceBundle是一个抽象类。为了让ResourceBundle正确地选择属性文件,这个文件名必须有一定格式,即必须包含一个基准名,后面再接下划线、语言码,还可以再加一条下划线和国家码。如:Resources_en_US.properties

注意:前面的基准名是任意的,就是说可以自己取,比如说messages,但后面的就不能那么随意了,因为ResourceBundle会根据后面的内容去寻找属性文件。

2、SpringMVC中不直接使用BesourceBundle,而是在messageSource这个bean中定义了ReloadableResourceBundleMessageSource类作为实现类来实现的。配置如下:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">   
	<property name="defaultEncoding" value="UTF-8" />
        <property name="useCodeAsDefaultMessage" value="true" />
    	<property name="basenames">
	        <list>
	            <value>i18n/messages</value>
	        </list>
        </property> 
   </bean> 
当然,这是我写的配置,你还可以在这其中配置其他属性。

这里有必要指出来的是,另外一个实现类和这里的ReloadableResourceBundleMessageSource具有相同的作用,叫ResourceBundleMessageSource。但是它俩又有所不同,不同之处在于:ReloadableResourceBundleMessageSource是在应用程序目录下搜索属性文件。而使用ResourceBundleMessageSource时,属性文件则必须放在类路径下,即WEB-INF/class目录下。

3、在配置过程中,你还需要告诉SpringMVC使用哪个语言区域,如下是我的配置:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
这里我是用的是SessionLocaleResolver。当然还有AcceptHeaderLocaleResolver和CookieLocaleResolver。其中AcceptHeaderLocaleResolver为最基础的一个,表示 通过检验HTTP请求的accept-language头部来解析区域。这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定。请注意,这个区域解析器无法改变用户的区域, 因为它无法修改用户操作系统的区域设置。

而SessionLocaleResolver和CookieLocaleResolver都会先去Session或者Cookie中寻找,若不存在,则根据浏览器选择语言来显示。

4、SpringMVC标签的使用

经常使用的是message和code、以及var标签,不过使用之前,要在JSP页面前面声明下面的taglib指令。

<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
所有标签列举如下:(此图片来自于Spring MVC学习指南)


三、建议

在开发过程中,若有中文属性文件,则先不要将中文转换为Unicode,方便之后开发中重复使用,在开发完成发版本时,再转换为Unicode即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值