Spring的国际化资源messageSource
Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource。
可配置如下messageSource这个bean id不能变:
@Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:messages"); messageSource.setCacheSeconds(10); //reload messages every 10 seconds messageSource.setDefaultEncoding("UTF-8"); messageSource.setUseCodeAsDefaultMessage(true); return messageSource; }
或者xml
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>resources/messages</value> </list> </property> </bean>
Spring提供了一个接口MessageSource用于获取国际化信息,ReloadableResourceBundleMessageSource和ResourceBundleMessageSource都是继承了该接口的一个抽象实现类AbstractMessageSource,继承该抽象类的有四个类,分别是:
StaticMessageSource 主要用于测试环境,并不用于生产环境
SpringSecurityMessageSource 用于Spring security的国际化信息
ReloadableResourceBundleMessageSource 可以在不用重新启动服务器的情况下,读取更改后的资源文件
ResourceBundleMessageSource 用于生产环境
用法示例:
public class MessageSourceTest extends TestCase { public void testResourceBundleMessageSource(){ MessageSource messageSource=new ClassPathXmlApplicationContext("applicationcontext.xml"); String username_us=messageSource.getMessage("userName_lable",new Object[1],Locale.US); String username_chinese=messageSource.getMessage("userName_lable",new Object[0],Locale.CHINESE); System.out.println("chinese:"+username_chinese); System.out.println("english:"+username_us); } }
chinese:用户名
english:userName