`
Wind_ZhongGang
  • 浏览: 264711 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

  Spring提供了一个接口MessageSource用于获取国际化信息。有这么几个类值得注意,用于在项目中启用国际化信息功能,一个抽象类AbstractMessageSource,继承该抽象类的有四个类,分别为ResourceBundleMessageSource,ReloadableResourceBundleMessageSource,StaticMessageSource,

SpringSecurityMessageSource。各个类的功能相当,只是用处不同,查看Spring的javadoc发现,StaticMessageSource主要用于测试环境,编写测试类,并不用于生产环境,而SpringSecurityMessageSource用于Spring security的国际化信息。

 

  因为ApplicationContext继承并实现了MessagSource接口,所以ApplicationContext自身提供了国际化信息功能,想要在项目中实现国际化信息功能常用可以有两种做法。

 

  在介绍这两种做法之前,需要事先定义好国际化文件,如图:

 

  internationalization files

 

  在这里,我是在测试环境中来测试Spring提供的国际化信息功能,其中文件名为testInfo的Resource bundle

中有三个国际化文件文件,分别为英语,日语,中文,这里的国际化文件命名有一定的规范,如果不符合规范,那么Spring是无法解析国际化文件的,不能知道你哪个文件是哪个语言的国际化文件。国际化文件命名规范遵从 ${filename}_${languagename}_${countryname},其中${}是需要替代的内容,下划线是必需的分隔符,所以如果你想要定义一个法语国际化文件应该是这样的 testInfo_fr_FR,至于language和countryname的取名请参见java.util.Locale类,里面有详细说明。

 

  一。使用ApplicationContext提供的国际化信息功能

 

  启用ApplicationContext的国际化功能需要在ApplicationContext配置文件进行这样的定义

 

 

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

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
           <property name="basenames">
               <list>
                   <value>testError</value>
                   <value>testMessage</value>
                   <value>testInfo</value>
               </list>
           </property>
    </bean>

    <!--<bean id="messageSource" class="org.springframework.security.core.SpringSecurityMessageSource">-->
        <!--<property name="parentMessageSource" ref="resourceBundleMessageSource"/>-->
    <!--</bean>-->

    <!--<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">-->
           <!--<property name="parentMessageSource"  ref="resourceBundleMessageSource"/>-->
    <!--</bean>-->

    <!--<bean id="messageSource" class="org.springframework.context.support.StaticMessageSource">-->
           <!--<property name="parentMessageSource" ref="resourceBundleMessageSource"/>-->
    <!--</bean>-->
</beans>

 

  注释部分可以暂时不管,这里定义了一个MessageSource的实现类ResourceBundleMessageSource用于提供国际化功能,这里的id命名记得一定要以messageSource命名,因为研究AbstractApplicationContext会发现里面定义了一个messageSource属性,提供的set方法就是setMessageSource,Spring在初始化时会将ApplicationContext配置文件中id为messageSource的bean注入到ApplicationContext类中去,这样我们就可以使用ApplicationContext提供的国际化功能了。以下是测试类:

 

 


package com.dream.message;

import junit.framework.TestCase;
import org.springframework.context.MessageSource;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Locale;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-9-10
 * Time: 上午10:08
 */
public class MessageSourceTest extends TestCase {

    public void testResourceBundleMessageSource() throws Exception {
        MessageSource messageSource = new ClassPathXmlApplicationContext("testApplicationContext.xml");
        String message1 = messageSource.getMessage("info.one", null, Locale.CHINESE);
        String message2 = messageSource.getMessage("info.one", null, Locale.JAPAN);
        String message3 = messageSource.getMessage("info.one", null, Locale.US);
        assertEquals("This is the first message which language is Chinese.", message1);
        assertEquals("This is the first message which language is Japanese.", message2);
        assertEquals("This is the first message which language is English.", message3);
    }
}

 

  二。使用自定义的国际化信息功能

 

 

  想实现自定义的国际化信息功能,只需要自定义一个类,向该类中注入messageSource即可,这样就可以使用该接口中提供的方法来获取国际经信息了,其实与第一种方式并无二异。

  • 大小: 18.4 KB
1
6
分享到:
评论

相关推荐

    spring messageSource结合ehcache demo

    在本文中,我们将深入探讨如何在Spring框架中利用`messageSource`与Ehcache整合,以实现国际化(i18n)功能并优化提示语句的数据库读取性能。`messageSource`是Spring提供的一种用于处理多语言环境下的消息管理机制,...

    Spring国际化

    Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法

    pebble-spring-translate:Pebble 模板引擎的翻译扩展,使用 Spring 消息接口

    为模板引擎提供t函数,它从 Spring MessageSource 检索消息。 {{ t('users.show.title') }} “懒惰”查找 函数支持,因此您可以在users/show.html查找users.show.title消息,例如: {{ t('.title') }} 没有模板...

    spring源码中英文注释

    9. **国际化与本地化**:Spring提供了`MessageSource`接口来支持多语言环境。源码中会涉及资源文件的加载和消息的查找。 10. **SpEL(Spring Expression Language)**:Spring的表达式语言用于在运行时查询和操作...

    Grails中文参考手册

    - **国际化支持**:通过Spring MessageSource实现多语言支持。 - **事务管理**:基于Spring事务抽象概念,简化事务逻辑的编写。 #### 二、起步 ##### 2.1 下载并安装Grails - **下载**: 首先访问Grails官方网站或...

    spring2.0升级到spring3.0.5的开发包

    8. **国际化支持**:Spring 3.0的MessageSource接口提供了更好的国际化支持,可以更方便地处理多语言环境。 9. **测试框架增强**:Spring 3.0的测试支持更加完善,包括对Mockito等第三方库的集成,使得单元测试和...

    spring-spring-framework-4.3.24.RELEASE.zip

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

    Spring Boot实战派(源码)

    - `MessageSource`接口和`@MessageSource`注解实现多语言支持。 14. **邮件服务** - 使用JavaMailSender接口发送邮件,配置邮件服务器信息。 15. **云原生支持** - 支持Docker容器化部署,以及与云平台如Cloud ...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    国际化和本地化则可以通过消息源(MessageSource)来实现,为不同地区提供不同的显示内容。 在实际开发中,Spring MVC常常与Spring Data JPA或MyBatis等持久层框架结合使用,以方便数据库操作。此外,Spring MVC还...

    Spring2.5-中文参考手册chm

    Spring 2.5提供了对多语言环境的支持,允许开发者通过ResourceBundle和MessageSource接口来实现应用程序的国际化和本地化。 **JSR-303验证支持** Spring 2.5集成了JSR-303 Bean Validation规范,提供了对JavaBeans...

    Spring4JAR包、Spring4API,Spring4源码

    `MessageSource`接口也得到了改进,支持更灵活的消息解析。 Spring4还增强了数据访问层的支持。对JDBC、Hibernate、JPA等持久化技术的集成更加紧密,提供了更多的便捷工具和API。例如,`JdbcTemplate`和`...

    org.springframework.web.struts-3.1.0.M2.jar

    5. **国际化**:Spring的MessageSource接口可以与Struts的国际化策略结合,提供统一的国际化解决方案。 在实际项目中,我们通常会创建一个Spring配置文件,如`spring-struts.xml`,在这个文件中声明需要管理的...

    spring国际化实例

    `MessageSource`则是Spring提供的接口,它允许你在Spring应用中根据指定的语言代码来获取消息或错误文本。 首先,你需要创建资源文件,这些文件通常以`.properties`格式存储,例如`messages.properties`(默认语言...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 4.2. ...

    spring-boot源码

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

    Spring实现国际化的一个小例子

    &lt;bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"&gt; ``` 或者使用Java配置: ```java @Configuration public class AppConfig { @Bean public ...

    spring-web-3.0.6.release.jar.zip

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

    spring2.5.6.zip

    5. **国际化支持**:通过MessageSource接口,Spring 2.5.6提供了强大的国际化功能,使得应用可以轻松地适应不同语言环境。 二、Spring 2.5.6的模块组成 Spring框架由多个模块组成,包括Core Container(核心容器)...

    Spring MVC Locale 的使用 中文 英文 等语言 切换

    总结起来,Spring MVC通过`LocaleResolver`、`LocaleChangeInterceptor`、资源包以及`MessageSource`等组件提供了强大的多语言支持。开发者可以根据项目需求选择合适的配置,为用户提供友好的国际化体验。在实际开发...

    spring3.2.6源码文件

    10. **国际化和本地化**:Spring提供了处理多语言环境的工具,如MessageSource接口,可以轻松实现应用程序的国际化和本地化。 通过深入学习和研究Spring 3.2.6源码,开发者不仅可以理解Spring的工作机制,还能学习...

Global site tag (gtag.js) - Google Analytics