Spring确实表现优异的一个方面是对国际化的支持,借助MessageSource接口,你的应用程序能够访问各种不同语言存储的String资源和被调消息
尽管你无须为了使用MessageSource而去用ApplicationContext,实际上ApplicationContext已经继承了MessageSource,并针对载入消息及令消息在你的环境里可用可供了专门支持
除了ApplicationContext,spring 还提供了三个MessageSource实现:
ResourceBundleMessageSource 使用java ResourceBundle
ReloadableResourceMessageSouce 可以定期中心载入资源文件
StaticMessageSource
利用ApplicationContext对MessageSource的支持,你必须在配置文件中顶一个MessageSource类型,名称为messageSouce的bean,并配置beannames或者beanname属性
MessageSoureTest.java
import java.io.File;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
public class MessageResourceTest ... {
public static void main(String args[])...{
String realpath="";
//加载配置项
realpath=System.getProperty("user.dir")+File.separator+"src"+File.separator+"ch5/applicationContext/MessageResource"+File.separator+"applicationContext.xml";
ApplicationContext applicationContext=new FileSystemXmlApplicationContext("classpath:ch5/applicationContext/MessageResource/applicationContext.xml");
System.out.println(applicationContext.getMessage("msg", null,Locale.ENGLISH));
System.out.println(applicationContext.getMessage("msg", null,Locale.US));
System.out.println(applicationContext.getMessage("msg", null,Locale.UK));
System.out.println(applicationContext.getMessage("msg", null,Locale.CHINA));
System.out.println(applicationContext.getMessage("msg", null,Locale.CHINESE));
//带参数的例子
System.out.println(applicationContext.getMessage("msg", new Object[]...{"gao","xiang"},Locale.CHINESE));
}
}
配置文件:
< beans
xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
< bean id ="messageSource" class ="org.springframework.context.support.ResourceBundleMessageSource" >
< property name ="basenames" >
< list >
< value > ch5.applicationContext.MessageResource.labels </ value >
</ list >
</ property >
</ bean >
</ beans >
资源文件5个:
labels_en_GB.properties:msg = british english (en_GB)
labels_en.properties:msg = english (en)
labels_en_US.properties:msg = american(us)
labels_zh_CN.properties:msg = 中国(zn_CN)
labels_zh.properties:msg = 中国(zh) {0},{1}
结果:
english (en)
american (US)
british english (en_GB)
中国(zn_CN)
中国(zh) {0},{1}
中国(zh) gao,xiang