5.12.1 国际化支持

       

5.12.1 国际化支持

ApplicationContext 接口继承 MessageSource 接口,因此具备国际化功能。下面是MessageSource 接口中定义的三个用于国际化的方法:

StringgetMessage(Stringcode,0均ect[]args,Localeloc)。

StringgetMessage(Stringcode,Object[] 缸gs,Stringdefault,Localeloc)。

StringgetMessage(MessageSourceResolvableresolvable,Localelocale)。

ApplicationContext 也通过这三个方法,完成消息的国际化。在 ApplicationContext加载时,自动查找在context中 MessageSourcebean。该bean的名字必须是MessageSource。一旦找到这个bean,上述三个方法的调用被委托给MessageSource。如果没有找到该bean,ApplicationContext 会查找其父定义中的 MessageSourcebean0 如果找到,它将被作为MessageSource使用。如果无法找到MessageSourcebean,则将会实例化空的StaticMessageSourcebean,该 bean 能接受上述三个方法的调用。

Spring 的国际化通常采用 ResourceBundleMessageSource类。看下面配置文件:

<?xrnlversioN="1.0"encoding="gb2312"?><!--指定 Spring 配置文件的dtd>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""
littp://www.springframework.org/dtd/spring-beans.dtd">
<!--Spring配置文件的根元素一〉
<beans>
<!--配置messsageSource bean. 该 bean的名字必须是messageSource
采用 Spring的实现类ResourceBund1eMessageSource-->
<bean id="messageSource" class="org.springframework.
context.support.ResourceBundleMessageSource">
<!--basenames确定资源文件的文件名,该属性接受list 值,用于接受多个资源文件->
<property name="basenames"><list>
<!-- 确定一份资源文件,资源文件名为message-->
<value>message</value>
<!--如果有多个资源文件,全部列在此处一〉
</list>
</property>
</bean>
</beans>

然后给出如下两份资源文件:

第一份,英文的资源文件,文件名:message_en.properties。

hello=welcome,{O}now=now is :{l}
第二份,中文的资源文件,文件名:message_zh.properties。
hello=欢迎你,{O}
now=现在时间是:{1}

当然,应使用native2asciii具将这份资源文件国际化,命令如下:

native2ascii message_zh.properties message_zh_l.properties
删除message_zh.properties文件,将message_zh_l.properties文件重命名为message_zh.properties。此时,程序拥有了两份资源文件,可以自适应英语和汉语的环境。主程序部分如下:
public class SpringTest
{
public static void main(String[] args)throws Exception
{
//实例化 ApplicationContext
ApplicationContext ctx =new FileSystemXrnlApplicationContext("bean.xml");
//创建参数数组
String[] a = {"读者" };
//使用 getMessage 方法获取本地化消息。 Locale 的 getDefault 方法用来返回计算机
//环境的 Locale
String hello = ctx.getMessage("hello" ,
a,Locale.getDefault());Object[] b ={口ewDate()};
String now = ctx.getMessage("hello" ,b,Locale.getDefault());
//打印出两条本地化消息
System.out.pri口tln(hello);System.out.println(now);
程序的执行结果会随环境不同而改变,在简体中文的环境下,执行结果如下:
[java] 欢迎你,读者
[java] 欢迎你,06-5-8 下午 3:34

英文环境下,执行结果如下:
[java] welcome,读者
[java] welcome,5/8/06 3:53 PM

当然,即使在英文环境下,"读者"这个词都无法变成英文,因为"读者"是写在程序代码中,而不是从资源文件中获得。

你可能感兴趣的:(spring,bean,xml)