spring中国际化,一般是将信息放在配置文件中
配置文件的格式如下:
<资源名>_<语言代码>_<国家/地区代码>.properties
方法1:
ResourceBundle
直接定位配置文件的位置
用法:
ResourceBoundle rb1 = ResourceBoundle.getBundle("com/youyu4/i18n/resource", Locale.US); ResourceBoundle rb2 = ResourceBoundle.getBundle("com/youyu4/i18n/resource", Locale.CHINA);
方法2:
MessageSource(接口)
ResourceBundleMessageSource(实现类)
配置文件的位置定义在XML中,然后直接在ApplicationContext中取就好
用法:
<bean id="myResource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!--通过基名指定资源,相对于类根路径--> <property name="basenames"> <list> <value>com/youyu4/i18n/resource</value> </list> </property> </bean>
String[] configs = {"com/youyu4/i18n/beans.xml"}; ApplicationContext ctx = new ClassPathXmlApplicationContext(configs); //获取MessageSource的Bean MessageSource ms = (MessageSource)ctx.getBean("myResource"); Object[] params = {"John", new GregorianCalendar().getTime()}; //获取格式化的国际化信息 String str1 = ms.getMessage("morning", params, Locale.US); String str1 = ms.getMessage("afternoon", params, Locale.CHINA);
方法3:
MessageSource(接口)
ReloadableResourceBundleMessageSource(实现类)
这个跟方法2类似,但能够定期刷新资源
用法:
<bean id="myResource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!--通过基名指定资源,相对于类根路径--> <property name="basenames"> <list> <value>com/youyu4/i18n/resource</value> </list> </property> <!--刷新资源文件,以秒为单位--> <property name="cacheSeconds" value="5"/> </bean>
java代码一样
下面可以使用容器级的MessageSource配置:
只需要配置文件中,<bean id="messageSource"
java代码中就不用写,MessageSource ms = (MessageSource)ctx.getBean("myResource");
注意:
这时id一定为MessageSource,否则报NoSuchMessageException