`
prodream
  • 浏览: 106125 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring-MessageSource

阅读更多

Spring自带的org.springframework.context.support.ResourceBundleMessageSource类注册到bean.xml中,这个类的作用是获取资源文件的内容,注册到IoCbean.xml文件中是为了自动获得此类的对象(Spring做了一些简化编程的处理)。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <bean id="Chinese" class="cn.com.chengang.spring.Chinese"/>

       <bean id="American" class="cn.com.chengang.spring.American"/>

       <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

              <property name="basenames">

                     <list>

                            <value>cn.com.chengang.spring.messages</value>

                     </list>

              </property>

       </bean>

</beans>

代码说明:

l           id="messageSource" 的设置是不变的、必须的。

l           ResourceBundleMessageSourceSpring的一个Message类。这里还有一个选择,用ReloadableResourceBundleMessageSource类,此类可以提供不用重启即可重新加载资源文件的特性(前者对资源文件只加载一次)。对于那种有热修改资源文件的需求,后者比较合适,只是后者在效率上有可能有损耗,因为至少要多一些检查资源文件是否改变的代码(这只是我的猜测,我没有仔佃去读这段的源码)。

l           basenames”是不变的、必须的。它是ResourceBundleMessageSource的一个属性,在源代码中的定义是“private String[] basenames;”,可见它是一个字符串数组。

l           cn.com.chengang.spring.messages”是把资源文件的位置传入到basenames属性中。注意:三个资源文件只需要将共同的主名(红色字体)传入:messages.propertiesmessages_zh_CN.propertiesmessages_zh_TW.properties

 

3、使用。修改MessageTest类,如下

package cn.com.chengang.spring;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MessageTest {

    public static void main(String[] args) {

        ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

        String str = ctx.getMessage("chengang", null, null);

        System.out.println(str);

    }

}

代码说明:

1main方法里

l           第一句取得bean.xml文件的配置信息。

l           第二句从资源文件里得到键值chengang对应的字符串。

l           第三句将字符串打印出来,结果是打印的是“陈刚”,说明读取的是messages_zh_CN.properties资源文件。

2ctx.getMessage("chengang", null, null);有三个参数:

l           第一个是资源文件的键值;

l           第二个是资源文件字符串的参数,由于本字符串没有参数,所以用一个null(后面给出了一个用到字符串参数的实例);

l           第三个是一个java.util. Locale类型的参数。参数为null,则表示根据使用者的语言环境来选择Locale,因为我用的是中文版的windows,所以在取字符串时它自动选择了messages_zh_CN.properties资源文件。
   
这其中还有一个控制点在JVMJVM会根据当前操作系统的语言环境进行相应处理,我们可以通过在JVM启动参数中追加“-Duser.language=zh_TW”来设定当前JVM语言类型,通过JVM级的设定,也可以实现自动切换所使用的资源文件类型。
   
所以这里面的控制语言的方式有三种:从最低层的操作系统的Locale设定,到更上一层的JVMLocale设定,再到程序一级的Locale设定。

3.3  资源文件的其他使用方式:

package cn.com.chengang.spring;

import java.util.Locale;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import org.springframework.context.support.ResourceBundleMessageSource;

public class MessageTest {

    public static void main(String[] args) {

        ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

        String str = ctx.getMessage("chengang", null, null);

        System.out.println(str); //输出“陈刚”

        /*

         * 使用了messages.properties

         */

        str = ctx.getMessage("chengang", null, new Locale(""));

        System.out.println(str);//输出“Giles

        /*

         * 使用了messages_zh_CN.properties

         */

        str = ctx.getMessage("chengang", null, new Locale("zh", "CN"));

        System.out.println(str);//输出“陈刚”

        /*

         * 使用了messages_zh_TW.properties

         */

        str = ctx.getMessage("chengang", null, new Locale("zh", "TW"));

        System.out.println(str);//输出“陳剛”

        /*

         * 使用了messages_zh_TW.properties,从这里可见资源文件的起名可以很随意,

         * 比如我们建立一个messages_123.properties,在传参数时候就可以这样:

         * new Locale("123"),一样也可以取出messages_123.properties中的值

         */

        str = ctx.getMessage("chengang", null, new Locale("zh_TW"));

        System.out.println(str);//输出“陳剛”

        /*

         * 当找不到相应的资源文件时,使用了messages_zh_CN.properties

         */

        str = ctx.getMessage("chengang", null, new Locale("abcd"));

        System.out.println(str);//输出“陈刚”

         /**

         * 不通过IoC注册,直接使用ResourceBundleMessageSource类的写法。

         */

        ResourceBundleMessageSource s = new ResourceBundleMessageSource();

        s.setBasename("cn.com.chengang.spring.messages");

        str = s.getMessage("chengang", null, null);

        System.out.println(str);//输出“陈刚”

    }

}

代码说明:

前面说过控制语言的方式有三种:从最低层的操作系统的Locale设定,到更上一层的JVMLocale设定,再到程序一级的Locale设定。我认为最佳的方法是在程序一级进行控制:定义一个统一的Locale静态变量,然后整个系统中只使用这一个变量,以后就可以通过界面操作设置此Locale变量的值,让用户来选择他所需的软件语言。而且我们也可以将此静态变量设成null值,来自动选择资源文件。

另外,Locale里也定义了一些常量,我们可以直接使用而不必去new一个Locale对象,如:“Locale.ENGLISH”。

---摘自http://xp84012493.iteye.com/blog/199627

分享到:
评论

相关推荐

    spring-boot-samples-master

    7. **国际化**:"spring-boot-sample-i18n"解释了如何实现多语言支持,使用Spring Boot的messageSource机制。 8. **WebSocket**:"spring-boot-sample-websocket"展示了如何在Spring Boot中实现WebSocket通信,用于...

    spring-boot-reference-zh

    12. **国际化的支持(i18n)**:Spring Boot 提供了处理多语言的工具,如消息源(MessageSource)和资源包(Resource Bundle)。 13. **事件驱动和消息传递**:通过 Spring Integration 和 AMQP 支持消息队列(如 ...

    spring-boot源码

    10. **国际化的支持**:Spring Boot通过`MessageSource`支持多语言,配置在`spring-boot-autoconfigure`模块中。`@MessageSource`注解用于加载资源文件,如`messages.properties`。 11. **日志系统**:Spring Boot...

    spring-framework-2.5.6

    Spring 2.5.6提供了对国际化的良好支持,通过ResourceBundle和MessageSource接口,可以轻松地实现多语言环境的应用。同时,其内置的主题支持允许应用根据用户选择或系统设定展示不同的界面风格。 六、测试支持 ...

    spring-mvc-showcase

    同时,通过消息源(MessageSource)实现国际化,使应用能够根据用户选择的语言显示不同的文本。 八、测试与调试 在"spring-mvc-showcase"项目中,Spring MVC提供了方便的测试支持,如MockMvc,可以模拟HTTP请求并...

    spring-web-3.0.6.release.jar.zip

    Spring Web提供了方便的国际化支持,通过消息源(MessageSource)接口,可以实现根据不同区域显示不同语言的内容。开发者可以定义不同语言的资源文件,Spring会自动选择合适的资源进行显示。 六、文件上传与下载 ...

    spring-cloud-steam-rabbitmq-demo.zip

    例如,创建一个`MessageSource`接口,通过`@StreamListener`监听消息,并处理它们。同时,提供一个`@SendTo`注解的方法,用于发送消息到指定的通道。 3. **RabbitMQ配置**: 在Spring Boot应用中,我们需要引入`...

    spring-framework-reference

    6. **国际化**:通过ResourceBundle和MessageSource实现多语言支持。 7. **安全控制**:利用Spring Security进行用户认证和授权。 五、未来发展 Spring框架持续演进,不断适应新的技术趋势,如Spring Boot简化了...

    spring-boot-web.zip

    3. **使用MessageSource**:Spring Boot提供`MessageSource`接口来访问和解析资源文件中的消息。在你的服务类或控制器中,可以通过依赖注入`MessageSource`并调用`getMessage()`方法获取相应的翻译文本。 4. **请求...

    spring-webmvc.jar 一个用到但比较难找的jar包

    9. **LocaleResolver**和**MessageSource**:这两者分别用于处理本地化和国际化,提供多语言环境下的信息展示。 在这个压缩包中,除了spring-webmvc.jar之外,还包含了一个名为springframework-license.txt的文件,...

    spring-mvc-官方中文文档

    15. **国际化和本地化**:Spring MVC 支持 i18n 和 l10n,通过 MessageSource 和 LocaleResolver 实现多语言支持。 通过阅读《Spring MVC 官方中文文档》,开发者可以全面了解并掌握 Spring MVC 的使用,从而更有效...

    spring-4.2.5-jar包

    7. **国际化与本地化**:Spring 4.2.5在处理多语言环境方面提供了更好的支持,通过ResourceBundle和MessageSource接口,开发者可以轻松实现应用程序的国际化和本地化。 8. **安全性**:Spring Security 4.2.5与...

    spring-framework-2.0.6-with-dependencies.zip

    5. **国际化支持**:Spring提供了强大的国际化(i18n)支持,通过ResourceBundle和MessageSource接口,轻松实现多语言环境下的应用。 三、关键组件 1. **IoC容器**:Spring的核心是IoC容器,它负责管理对象的生命...

    translation-spring-mvc-4-documentation, Spring MVC 4.2.4 RELEASE 中文文档完整翻译稿.zip

    Spring MVC通过MessageSource接口提供这一功能,开发者可以创建不同语言的资源文件,系统会根据用户的选择自动选择合适的资源。 除此之外,Spring MVC还支持RESTful风格的URL设计、文件上传下载、异常处理、视图...

    spring-context-3.0.2.release.jar.zip

    通过`MessageSource`接口和`@MessageSource`注解,可以轻松实现多语言环境下的消息获取,使得应用更具国际化特性。 综上所述,Spring-Context 3.0.2 RELEASE作为Spring框架的核心模块,为开发者提供了强大的上下文...

    spring-context-3.1.1.RELEASE.zip

    3. **国际化**:通过ResourceBundle和MessageSource接口,Spring Context支持多语言环境的应用。 4. **数据绑定**:Spring提供了一种将用户界面输入数据绑定到Java对象的方法,简化了Web表单处理。 5. **AOP支持**...

    spring-framework 1.0

    9. **国际化支持**:Spring 1.0通过ResourceBundle和MessageSource接口支持多语言环境,帮助开发者轻松实现应用的国际化。 10. **事件传播**:Spring 1.0的ApplicationContext接口允许bean之间通过ApplicationEvent...

    spring-context-3.0.0.RELEASE.jar.zip

    `spring-context-3.0.0.RELEASE.jar`包含了Spring上下文模块的主要类和接口,包括BeanFactory、ApplicationContext、MessageSource等核心接口,以及它们的实现类,如ClassPathXmlApplicationContext、...

    spring-framework-3.0.0.RELEASE-with-docs

    9. **国际化和本地化**:Spring 3.0增强了国际化和本地化处理,通过`MessageSource`接口,可以方便地实现多语言环境下的消息显示。 10. **Web Flow集成**:Spring Web Flow是Spring框架的一部分,用于处理复杂的...

    spring-spring-framework-4.3.24.RELEASE.zip

    8. **国际化和本地化**:Spring通过MessageSource接口处理多语言环境下的文本消息。在`org.springframework.context.support`包中,我们可以找到实现这一功能的类。 9. **任务调度**:Spring的Task模块提供了异步...

Global site tag (gtag.js) - Google Analytics