如果应用程序需要国际化支持,就不能直接将文本硬编码在程序中。通过定义一个或多个属性文件保存应用程序中需要给用户显示的信息,每种语言或区域对应一个属性文件,从而实现根据用户语言及地区动态地绑定文本信息。
Spring的ApplicationContext对国际化的支持也正是依赖于Java平台的国际化支持,不过,并不需要与Java平台本身提供的ResourceBundle打交道,而是直接通过ApplicationContext 获得国际化信息。ApplicationContext 实现了MessageSource接口,为国际化提供了支持。
//配置文件:
/*
ApplicationContext需要一个MessageSource的实例来实现国际化支持,它会在当前配置文件中查找一个名为“messageSource”的Bean
*/
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 指定国际化文本的"基本"文件名-->
<property name="basename" value="greeting"></property>
</bean>
//两个属性文件
greeting_en_US.properties
hello=hello
world=world
who={0}
greeting_zh_CN.properties
hello=\u4F60\u597D
world=\u4E16\u754C
who={0}
//测试类
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Locale locale = Local.getDefault();
System.out.println(
locale.getDisplayName()+
ac.getMessage("hello", null, locale)+
ac.getMessage("world", null, locale)+
ac.getMessage("who", new String[]{"小明"}, locale)
);
locale= new Locale("en_US");
System.out.println(
locale.getDisplayName()+
ac.getMessage("hello", null, locale)+
ac.getMessage("world", null, locale)+
ac.getMessage("who", new String[]{"xiaoming"}, locale)
);
//运行结果:
中文 (中国)你好世界小明
en_ushelloworldxiaoming