messageSource 在spring 中提供国际化的支持
ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化)。与 HierarchicalMessageSource一起使用,它还能够处理嵌套的消息,这些是Spring提供的处理消息的基本接口。让我们快速浏览一 下它所定义的方法:
String getMessage(String code, Object[] args, String default, Locale loc):用来从MessageSource获取消息的基本方法。如果在指定的locale中没有找到消息,则使用默认的消息。args中的参数将使用标 准类库中的MessageFormat来作消息中替换值。
String getMessage(String code, Object[] args, Locale loc):本质上和上一个方法相同,其区别在:没有指定默认值,如果没找到消息,会抛出一个NoSuchMessageException异常。
String getMessage(MessageSourceResolvable resolvable, Locale locale):上面方法中所使用的属性都封装到一个MessageSourceResolvable实现中,而本方法可以指定 MessageSourceResolvable实现。
当一个ApplicationContext被加载时,它会自动在context中查找已定义为MessageSource类型的bean。此 bean的名称须为messageSource。如果找到,那么所有对上述方法的调用将被委托给该bean。否则ApplicationContext会 在其父类中查找是否含有同名的bean。如果有,就把它作为MessageSource。如果它最终没有找到任何的消息源,一个空的 StaticMessageSource将会被实例化,使它能够接受上述方法的调用。
protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) { this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class); // Make MessageSource aware of parent MessageSource. if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) { HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource; if (hms.getParentMessageSource() == null) { // Only set parent context as parent MessageSource if no parent MessageSource // registered already. hms.setParentMessageSource(getInternalParentMessageSource()); } } if (logger.isDebugEnabled()) { logger.debug("Using MessageSource [" + this.messageSource + "]"); } } else { // Use empty MessageSource to be able to accept getMessage calls. DelegatingMessageSource dms = new DelegatingMessageSource(); dms.setParentMessageSource(getInternalParentMessageSource()); this.messageSource = dms; beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource); if (logger.isDebugEnabled()) { logger.debug("Unable to locate MessageSource with name '" + MESSAGE_SOURCE_BEAN_NAME + "': using default [" + this.messageSource + "]"); } } }
Spring目前提供了两个MessageSource的实现:ResourceBundleMessageSource和 StaticMessageSource。它们都继承NestingMessageSource以便能够处理嵌套的消息。 StaticMessageSource很少被使用,但能以编程的方式向消息源添加消息。ResourceBundleMessageSource会用得 更多一些,为此提供了一下示例:
com.liyixing.spring.properties包下面有
format_en_GB.properties文件
test.mesage = 123
test.mesage = 456
format_zh.properties文件
<beans>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>com.liyixing.spring.properties.format</value>
</list>
</property>
</bean>
</beans>
String a = context.getMessage("test.mesage", null, "Default", null);
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "beans.xml", "beans1.xml" });
IAccount accountService = (IAccount) context.getBean("accountService");
IDownload download = (IDownload) context.getBean("downloadService");
Account account = (Account) context.getBean("account");
String a = context.getMessage("test.mesage", null, "Default",
new Locale("en", "GB"));
String b = context.getMessage("test.mesage", null, "Default",
new Locale("zh"));
相关推荐
在本文中,我们将深入探讨如何在Spring框架中利用`messageSource`与Ehcache整合,以实现国际化(i18n)功能并优化提示语句的数据库读取性能。`messageSource`是Spring提供的一种用于处理多语言环境下的消息管理机制,...
Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法
为模板引擎提供t函数,它从 Spring MessageSource 检索消息。 {{ t('users.show.title') }} “懒惰”查找 函数支持,因此您可以在users/show.html查找users.show.title消息,例如: {{ t('.title') }} 没有模板...
9. **国际化与本地化**:Spring提供了`MessageSource`接口来支持多语言环境。源码中会涉及资源文件的加载和消息的查找。 10. **SpEL(Spring Expression Language)**:Spring的表达式语言用于在运行时查询和操作...
- **国际化支持**:通过Spring MessageSource实现多语言支持。 - **事务管理**:基于Spring事务抽象概念,简化事务逻辑的编写。 #### 二、起步 ##### 2.1 下载并安装Grails - **下载**: 首先访问Grails官方网站或...
8. **国际化支持**:Spring 3.0的MessageSource接口提供了更好的国际化支持,可以更方便地处理多语言环境。 9. **测试框架增强**:Spring 3.0的测试支持更加完善,包括对Mockito等第三方库的集成,使得单元测试和...
8. **国际化和本地化**:Spring通过MessageSource接口处理多语言环境下的文本消息。在`org.springframework.context.support`包中,我们可以找到实现这一功能的类。 9. **任务调度**:Spring的Task模块提供了异步...
- `MessageSource`接口和`@MessageSource`注解实现多语言支持。 14. **邮件服务** - 使用JavaMailSender接口发送邮件,配置邮件服务器信息。 15. **云原生支持** - 支持Docker容器化部署,以及与云平台如Cloud ...
国际化和本地化则可以通过消息源(MessageSource)来实现,为不同地区提供不同的显示内容。 在实际开发中,Spring MVC常常与Spring Data JPA或MyBatis等持久层框架结合使用,以方便数据库操作。此外,Spring MVC还...
Spring 2.5提供了对多语言环境的支持,允许开发者通过ResourceBundle和MessageSource接口来实现应用程序的国际化和本地化。 **JSR-303验证支持** Spring 2.5集成了JSR-303 Bean Validation规范,提供了对JavaBeans...
`MessageSource`接口也得到了改进,支持更灵活的消息解析。 Spring4还增强了数据访问层的支持。对JDBC、Hibernate、JPA等持久化技术的集成更加紧密,提供了更多的便捷工具和API。例如,`JdbcTemplate`和`...
5. **国际化**:Spring的MessageSource接口可以与Struts的国际化策略结合,提供统一的国际化解决方案。 在实际项目中,我们通常会创建一个Spring配置文件,如`spring-struts.xml`,在这个文件中声明需要管理的...
`MessageSource`则是Spring提供的接口,它允许你在Spring应用中根据指定的语言代码来获取消息或错误文本。 首先,你需要创建资源文件,这些文件通常以`.properties`格式存储,例如`messages.properties`(默认语言...
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. ...
10. **国际化的支持**:Spring Boot通过`MessageSource`支持多语言,配置在`spring-boot-autoconfigure`模块中。`@MessageSource`注解用于加载资源文件,如`messages.properties`。 11. **日志系统**:Spring Boot...
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> ``` 或者使用Java配置: ```java @Configuration public class AppConfig { @Bean public ...
Spring Web提供了方便的国际化支持,通过消息源(MessageSource)接口,可以实现根据不同区域显示不同语言的内容。开发者可以定义不同语言的资源文件,Spring会自动选择合适的资源进行显示。 六、文件上传与下载 ...
5. **国际化支持**:通过MessageSource接口,Spring 2.5.6提供了强大的国际化功能,使得应用可以轻松地适应不同语言环境。 二、Spring 2.5.6的模块组成 Spring框架由多个模块组成,包括Core Container(核心容器)...
总结起来,Spring MVC通过`LocaleResolver`、`LocaleChangeInterceptor`、资源包以及`MessageSource`等组件提供了强大的多语言支持。开发者可以根据项目需求选择合适的配置,为用户提供友好的国际化体验。在实际开发...
10. **国际化和本地化**:Spring提供了处理多语言环境的工具,如MessageSource接口,可以轻松实现应用程序的国际化和本地化。 通过深入学习和研究Spring 3.2.6源码,开发者不仅可以理解Spring的工作机制,还能学习...