`
lijun87
  • 浏览: 268371 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Internationalization of spring

阅读更多

 

转载于:improviser blog

国际化支持在实际开发中可能是最常用的特性,本文分析Spring的 ApplicationContext 提供国际化支持, 其提供了更加强大的功能,如信息的自动装配以及热部署功能(配置文件修改后自动读取,而无需重新启动应用程序)。
    目前Spring中提供了两个 MessageSource接口的实现,即ResourceBundleMessageSourceReloadableResourceBundleMessageSource,后者提供了无需重启即可重新加载配置信息的特性。

   
    在下面的配置文件中,通过MessageResource的一个实现类org.springframework.context.support.ResourceBundleMessageSource来获得国际化的信息。
 

<!----> 1 <beans>
 2 <description>Spring Quick Start</description>
 3 <bean id="messageSource"
     class
="org.springframework.context.support.ResourceBundleMessageSource">
 4 <property name="basenames">
 5 <list>
 6 <value>messages</value>
 7 </list>
 8 </property>
 9 </bean>
10 </beans>
11 

 

这里声明了一个名为 messageSource Bean 注意: 对于Message定义,Bean ID必须为messageSource,这是目前Spring的编码规约),对应类为ResourceBundleMessageSource

而其中的basename属性用來设定资源信息文件的前置文件名称,在本例中为messagesSpring会自动在CLASSPATH根路径中按照如下顺序搜寻资源信息文件并进行加载(以Localezh_CN为例,其实Spring在实际上调用了JDKResourceBundle读取配置文件) :

messages_zh_CN.properties

messages_zh.properties

messages.properties

messages_zh_CN.class <!--[endif]-->

messages_zh.class

messages.class

<!--[if !supportLists]--> 资源配置信息文件中的内容

<!---->1 messages_zh_CN.properties:
2 userinfo=当前登录用户: [{0}] 登录时间:[{1}]
3 messages_en_US.properties:
4 userinfo=Current Login user: [{0}] Login time:[{1}]
5 


  测试代码:

<!---->1 ApplicationContext ctx =
               
new FileSystemXmlApplicationContext("bean.xml");
2 Object[] arg = new Object[]
3 "Erica", Calendar.getInstance().getTime()
4 };
5 //以系统默认Locale加载信息(对于中文WinXP而言,默认为zh_CN)
6 String msg = ctx.getMessage("userinfo", arg);
7 System.out.println("Message is ===> "+msg);
8 


 

代码中,我们将一个Object数组arg作为参数传递给ApplicationContext.getMessage方法,这个参数中包含了出现在最终文字信息中的可变内容,ApplicationContext  将根据参数中的Locale信息对其进行处理(如针对不同   Locale设定日期输出格式),并用其替换配置文件中的{n}标识(n代表参数数组中的索引,从开始)。

运行上面的代码,得到以下输出的内容:
   Message is ===> |
ì〃¤?°|ì???¨???: [Erica] |ì???¨o〃¤??:[07-9-27 上午1:27]

针对ResourceBundle的编码过程中发生的问题。这是由于转码过程中产生的编码问题引发的。比较简单的解决办法是通过JDK提供的转码工具native2ascii.exe  进行转换。执行:native2ascii messages_zh_CN.properties msg.txt。再用msg.txt文件替换Messages_zh_CN.properties       文件。

   再次运行示例代码,得到正确输出:

   Message is ===> 当前登录用户: [Erica] 登录时间:[07-9-27 上午1:30]

尝试在代码中指定不同的Locale参数:

String msg = ctx.getMessage("userinfo", arg, Locale.US);再次运行,可以看到:

Message is ===> Current Login user: [Erica] Login time::[9/27/07 1:35AM]

可见,前者根据当前默认Locale"zh_CN"getMessage方法自动加载了messages_zh_CN.properties文件;后者getMessage方法根据指定编码"en_US"加载了messages_en_US.properties文件。 

分享到:
评论

相关推荐

    Getting.started.with.Spring.Framework.2nd.Edition1491011912.epub

    Getting started with Spring ...Chapter 13 – More Spring Web MVC – internationalization, file upload and asynchronous request processing Chapter 14 – Securing applications using Spring Security

    JPB__boot__Spring.rar_easyui spring boot_spring boot

    Spring boot + + easyUI JPA implementation based on the internationalization of the browser language configuration

    spring-framework-0.9.zip

    1. **依赖注入(Dependency Injection, DI)**:这是Spring最核心的设计理念,它通过反转控制(Inversion of Control, IoC)来管理对象的生命周期和依赖关系。DI允许开发者在运行时将对象组合在一起,而不是在代码...

    spring-framework-4.2.7全部jar包

    Spring框架的核心在于IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程),这两个概念是Spring设计哲学的基础。在4.2.7版本中,这两个特性得到了进一步的优化和完善。 1. *...

    spring-shell-1.1.0.RC1-dist

    5. **与Spring Framework的无缝集成**:由于Spring Shell是Spring家族的一部分,它可以直接利用Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性,使得开发者能够方便地将业务逻辑与...

    spring-framework-4.2.5.core_beans_context_aop.zip

    Spring Core 还提供了 IoC(Inversion of Control,控制反转)容器,它是整个框架的基石,负责管理对象的生命周期和装配。 2. **Spring Beans**: Spring Beans 模块主要处理对象的配置和管理。在Spring应用中,...

    Spring3.0 jar包

    3. **IoC(Inversion of Control,控制反转)**:Spring的IoC容器负责创建对象、配置对象以及管理对象间的依赖关系,使得代码更加模块化。 4. **Spring MVC**:Spring3.0中的Web MVC框架提供了一种模型-视图-控制器...

    官方原版完整包 spring-framework-5.2.13.RELEASE.zip

    1. **核心容器**:Spring的核心组件包括IoC(Inversion of Control)容器和依赖注入(Dependency Injection)。在5.2.13.RELEASE版本中,IoC容器管理着应用对象的生命周期和装配,使得开发者能够将对象的创建和依赖...

    Spring 3_0Spring 3_0框架详细资料

    3. **IoC容器**:Spring 3.0的核心是IoC(Inversion of Control)容器,它负责管理对象的生命周期和装配。开发者可以使用XML配置或注解来定义对象及其依赖关系,容器会根据这些信息自动创建和管理对象。 4. **注解...

    spring-framework-3.0.5.RELEASE-dependencies

    1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性,通过反转控制(Inversion of Control, IoC)容器来管理对象的生命周期和依赖关系,使代码更加解耦,易于测试和维护。 2. **AOP(面向切面编程...

    spring-framework-reference-4.1.2

    Examples of dependency injection ............................................................. 36 Dependencies and configuration in detail ........................................................... ...

    spring-framework-reference4.1.4

    Examples of dependency injection ............................................................. 36 Dependencies and configuration in detail ........................................................... ...

    SpringMVC需要用到的基本jar

    1. **Spring Framework Core**: 这是Spring的基础,包含IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)功能。核心jar包有`spring-core.jar`、`spring-beans.jar`、`...

    SSH框架模板ForMyEclipse.rar

    Spring框架则是一个全面的后端解决方案,它不仅包含IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程),还支持数据访问、事务管理、JMS、邮件服务等。在SSH中,Spring主要...

    java常用单词.pdf

    DI(Dependency Injection)或IoC(Inversion of Control)依赖注入,是现代Java开发中常见的设计模式,它简化了组件之间的依赖关系,提高了代码的可测试性和可维护性。Spring框架是DI的一个典型实现。 EJB...

    千寻简Java词典音标版

    `DI(Dependency Injection)`和`IoC(Inversion of Control)`的概念在Spring框架中尤为重要,它们有助于实现松散耦合和可测试的代码。 `MVC(Model-View-Controller)`是软件设计模式,广泛应用于Web应用开发,它...

    深入浅出struts2 源码所需开发包

    8. **依赖注入(Dependency Injection, DI)**:虽然Struts2不直接支持IoC(Inversion of Control),但通过与其他DI容器(如Spring)的集成,可以方便地实现组件的依赖管理。 9. **测试支持(Testing Support)**...

Global site tag (gtag.js) - Google Analytics