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} |
hello=欢迎你,{O} now=现在时间是:{1} |
当然,应使用native2asciii具将这份资源文件国际化,命令如下:
native2ascii message_zh.properties message_zh_l.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 |