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!