spring 国际化(2)

大家看了我写的spring 国际化(1)后,应该会发现如果要获取资源文件的信息时,需要将配置文件中的资源文件bean注入到你正在操作的bean以后,才能使用。

spring的做法是将国际化资源作成系统级别的,对任何组件都进行开放。

实现方法如下:

org.springframework.context.ApplicationContext这个接口也继承了org.springframework.context.MessageSource接口

spring容器在启动时会调用initMessageSource()方法,它的作用就是初始化容器中的国际化资源。

根据反射机制,从BeanDefinitionRegistry中找到名为“messageSource”并且类型为org.springframework.context.MessageSource的bean,将它加载为容器级的国际化资源文件。

例如:下面的xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">

    <!-- 名城必须为messageSource, 类型必须为org.springframework.context.MessageSource -->
    <!-- class为ResourceBundleMessageSource或ReloadableResourceBundleMessageSource都可以(区别已比较过) -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <!-- <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> -->
        <property name="basenames">
            <list>
                <value>spring3/local/application</value>
            </list>
        </property>
    </bean>

</beans>

 测试

package spring3.local;

import java.util.Locale;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MessageResourceMain {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"spring3/local/message_resource.xml");

		System.out.println("CHINA:"
				+ context.getMessage("greeting.morning", null, Locale.CHINA));
		System.out.println("JAPAN:"
				+ context.getMessage("greeting.morning", null, Locale.JAPAN));
		System.out.println("US:"
				+ context.getMessage("greeting.morning", null, Locale.US));
		System.out.println("CANADA:"
				+ context.getMessage("greeting.morning", null, Locale.CANADA));

	}

}

 输出结果

CHINA:早上好
JAPAN:お早うございます
US:good night!
CANADA:お早うございます

猜你喜欢

转载自xieyan30.iteye.com/blog/1831955