7.4.3 ApplicationContext的国际化支持
ApplicationContext
接口继承了MessageSource
接口,因此具有国际化功能。
MessageSource接口中用于国际化的方法
下面是MessageSource
接口中定义的两个用于国际化的方法。
String getMessage(String code,Object[] args, Locale locale)
String getMessage(String code,Object[] args,String default,Locale locale)
ApplicationContext
正是通过这两个方法来完成国际化的,当程序创建ApplicationContext
容器时Spring
自动查找配置文件中名为messageSource
的Bean
实例,
- 一旦找到这个
Bean
实例,上述两个方法的调用就被委托给该messageSource Bean
。 - 如果没有该
Bean
,ApplicationContex
会查找其父容器中的messageSource Bean
;如果找到,它将被作为messageSource Bean
使用。 - 如果无法找到
messageSource Bean
,系统将会创建一个空的StaticMessageSourceBean
,该Bean
能接受上述两个方法的调用。
在Spring
中配置messageSource bean
时通常使用ResourceBundleMessageSource
类。
程序示例
项目结构
1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\I18N |
beans.xml
看下面的配置文件。
1 |
|
上面文件的粗体字代码定义了一个id
为messageSource
的Bean
,该Bean
实例只指定了一份国际化资源文件,其baseName
是message
.
然后给出如下两份资源文件。
message_en_US.properties
第一份为美式英语的资源文件:
1 | hello=welcome,{0} |
message_zh_CN.properties
第二份为简体中文的资源文件:
1 | hello=欢迎你,{0} |
由于Java9
支持使用UTF-8
字符集保存国际化资源文件,这种国际化资源文件可以包含非西欧字符,因此只要将这份文件以UTF-8
字符集保存即可。此时,程序拥有了两份资源文件,可以自适应美式英语和简体中文的环境。主程序部分如下。
SpringTest.java
1 | package lee; |
上面的两行粗体字代码是Spring
容器提供的获取国际化消息的方法,这两个方法由MessageSource
接口提供。
上面程序的执行结果会随环境不同而改变,在简体中文的环境下,执行结果如下:
1 | 欢迎你,孙悟空 |
注意Spring
的国际化支持,其实是建立在Java
程序国际化的基础之上的。其核心思路都是将程序中需要实现国际化的信息写入资源文件,而代码中仅仅使用相应的各信息的Key