spring支持资源文件国际化

1.spring对国际化支持

国际化支持在实际开发中可能是最常用的特性。对于一个需要支持不同语言环境的应用而言,我们所采取的最常用的策略一般是通过一个独立的资源文件(如一个properties文件)完成所有语言信息(如界面上的提示信息)的配置,Spring对这种传统的方式进行了封装,并提供了更加强大的功能,如信息的自动装配以及热部署功能(配置文件修改后自动读取,而无需重新启动应用程序) ,下面是一个典型的示例:

 

<beans>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>myres</value>
			</list>
		</property>
</bean>
</beans>

 这里声明了一个名为messageSource的Bean(注意对于Message定义,Bean ID必须为messageSource,这是目前Spring的编码规约) ,对应类为ResourceBundleMessageSource,目前Spring中提供了两个MessageSource接口的实现,即ResourceBundleMessageSource和ReloadableResourceBundleMessageSource,后者提供了无需重启即可重新加载配置信息的特性。

在配置节点中, 我们指定了一个配置名“messages”。 Spring会自动在CLASSPATH根路径中按照如下顺序搜寻配置文件并进行加载(以Locale为zh_CN为例): 

messages_zh_CN.properties ,messages_zh.properties ,messages.properties ,messages_zh_CN.class,messages_zh.class ,messages.class 

(Spring实际上调用了JDK的ResourceBundle读取配置文件,相关内容请参见JDK文档)

 

示例中包含了两个配置文件,内容如下:

messages_zh_CN.properties:

userinfo=当前登录用户: [{0}]  登录时间:[{1}]

messages_en_US.properties:

userinfo=Current Login user: [{0}]Login time:[{1}]

 

我们可以通过下面的语句进行测试:

ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml"); 
Object[] arg = newObject[]{ "Erica", Calendar.getInstance().getTime()}; 
//以系统默认Locale加载信息(对于中文WinXP而言,默认为zh_CN)
String msg = ctx.getMessage("userinfo", arg); 
System.out.println("Message is ===> "+msg)

如果输出产生乱码,可能是因为转码的时候出现异常(在eclipse中资源文件可以直接输入中文,自动转码,但是在外边通过记事本编辑输入中文是,转码就会出现异常),比较简单的解决办法是通过JDK提供的转码工具native2ascii.exe进行转换。

native2ascii -encoding UTF-8 messages_zh_CN.properties mys.txt

 把mys.txt替换成messages_zh_CN.properties,运行ok!

猜你喜欢

转载自cax-2014.iteye.com/blog/2143096