Spring国际化

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

猜你喜欢

转载自youyu4.iteye.com/blog/2256655