Spring的MessageSource有两个常用的实现ReloadableResourceBundleMessageSource和ResourceBundleMessageSource。这两个类在配置上有些区别。
我原来常用ResourceBundleMessageSource,它的典型配置如下:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="parentMessageSource" ref="bizMessageSource"/>
<property name="basenames">
<list>
<value>resources.cls-web-resources</value>
<value>resources.cls-web-resources-definitions</value>
<value>resources.cls-web-resources-menu</value>
</list>
</property>
</bean>
在比较一下ReloadableResourceBundleMessageSource的配置:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="parentMessageSource" ref="bizMessageSource"/>
<property name="fallbackToSystemLocale"><value>false</value></property>
<property name="basenames">
<list>
<value>classpath:resources/cls-web-resources</value>
<value>classpath:resources/cls-web-resources-definitions</value>
<value>classpath:resources/cls-web-resources-menu</value>
</list>
</property>
</bean>
原因在于
ReloadableResourceBundleMessageSource的内部使用DefaultResourceLoader来装载ResourceBundle,而
ResourceBundleMessageSource内部是直接使用java.util.ResourceBundle.
getBundle(String baseName, Locale locale, ClassLoader loader) 来获取i18n文件信息的,而ResourceBundle是使用“.”来作为
basename分隔符的(这也是我们常用的形式),所以很前面的配置有些区别。
另外如果你不设置“
fallbackToSystemLocale”的话,那么当你传入的Locale是null或者ResourceBundle没有该Locale的配置文件的话,那么会返回Locale.getDefault()的Locale下的
Message。
该设置默认为True,也就是说,如果找不到相应的ResourceBundle,系统始终会显示为中文的
Resource,
建议关掉该设置,否则fallBackLocale久没有什么意义了。
另外还有一个有用的设置“useCodeAsDefaultMessage”,默认为false,这样当Spring在ResourceBundle中找不到messageKey的话,就抛出NoSuchMessageException,把它设置为True,则找不到不会抛出异常,而是使用messageKey作为返回值。
分享到:
相关推荐
Spring 提供了多种机制来加载和管理多个配置文件,确保应用程序能够灵活地组织和维护其配置细节。 ##### 3.1 ApplicationContext 加载多个配置文件 `ApplicationContext` 是 Spring 的核心接口之一,用于提供Bean...
9. **国际化与本地化**:Spring提供了`MessageSource`接口来支持多语言环境。源码中会涉及资源文件的加载和消息的查找。 10. **SpEL(Spring Expression Language)**:Spring的表达式语言用于在运行时查询和操作...
10. **国际化的支持**:Spring Boot通过`MessageSource`支持多语言,配置在`spring-boot-autoconfigure`模块中。`@MessageSource`注解用于加载资源文件,如`messages.properties`。 11. **日志系统**:Spring Boot...
以上只是Spring 3.0配置知识的一部分,实际文档中会涵盖更多细节,包括如何配置数据源、事务管理、缓存、任务调度等,以及如何使用Spring的测试框架进行单元测试和集成测试。通过深入学习和理解这些配置机制,开发者...
通过对Spring 2.5.6源代码的深入学习,开发者可以更好地理解Spring的设计原则和实现细节,这将有助于在实际项目中更有效地使用Spring框架,并为后续版本的学习打下坚实基础。API文档则提供了关于各个类和方法的详细...
Spring Web提供了方便的国际化支持,通过消息源(MessageSource)接口,可以实现根据不同区域显示不同语言的内容。开发者可以定义不同语言的资源文件,Spring会自动选择合适的资源进行显示。 六、文件上传与下载 ...
- Spring提供了多种具体的 `ApplicationContext` 实现,例如 `ClassPathXmlApplicationContext` 和 `AnnotationConfigApplicationContext`,分别用于解析XML配置和注解配置。 2. **BeanDefinition对象** - 在...
7. **国际化和本地化**:Spring 2.0支持多语言环境,通过ResourceBundle和MessageSource接口,开发者可以轻松实现应用的国际化和本地化。 8. **测试支持**:Spring 2.0提供了全面的测试框架,包括Mock对象、JUnit...
在《Spring 2.5 开发手册》中,会详细解释这些特性的使用方法、配置细节以及最佳实践,帮助开发者充分利用Spring框架,构建稳定、高效的应用系统。通过阅读这份手册,开发者可以深入理解Spring 2.5的工作原理,提升...
- **国际化和MessageSource**:本书探讨了如何利用Spring的MessageSource进行国际化支持。 - **事件的发布和订阅**:Spring框架支持事件驱动的编程模型,本书介绍了如何实现事件的发布和订阅机制。 - **进一步看一下...
Spring MVC 是一种轻量级的Web框架,它将业务逻辑、数据访问和用户界面分离开来,使得开发者可以更专注于业务处理,而不必关心过多的Web细节。该框架通过DispatcherServlet作为入口点,处理所有HTTP请求,并根据配置...
### Spring MVC 入门教程详解 #### 一、Spring MVC框架概述 Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它遵循Model-View-Controller...理解其核心概念和配置细节,对于开发人员来说至关重要。
在Spring Boot应用中,可以通过`@MessageSource`注解和`MessageSource` bean来访问这些消息资源。 2. **基于浏览器语言的检测** 浏览器会发送一个`Accept-Language`头部,其中包含了用户偏好语言的信息。Spring ...
9. **国际化和本地化**:Spring 3.0增强了国际化和本地化处理,通过`MessageSource`接口,可以方便地实现多语言环境下的消息显示。 10. **Web Flow集成**:Spring Web Flow是Spring框架的一部分,用于处理复杂的...
具体细节可能包括HelloWorld控制器、简单的视图、必要的配置以及可能的测试用例。这样的项目对学习者来说非常有用,因为他们可以直接运行代码,看到结果,从而更好地理解和学习Spring MVC的工作原理。
6. **错误处理和国际化支持**: 登录失败后的提示信息可能需要本地化处理,Spring MVC支持通过MessageSource接口配置多语言资源文件,根据用户首选的语言显示对应的消息。 7. **DispatcherServlet**: 是Spring MVC的...
8. **国际化**:Spring支持多语言环境,提供了MessageSource接口,可以方便地实现应用程序的国际化和本地化。 9. **Web服务**:Spring 2.0支持SOAP和RESTful Web服务的创建,通过WebServiceTemplate和RestTemplate...
它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,简化了前端控制器的实现,使得开发者可以专注于业务逻辑而不必关心太多的底层细节。 在Spring MVC中,以下是一些核心概念和知识点: 1. **...