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