深圳情缘 发表于 2006-7-25 09:55

spring入门之国际化支持

仿造夏昕的《spring开发指南》第23页   国际化支持例子    发贴出来与大家共享   
BTW:请问,真是开发中,是用Struts国际化,还是用spring国际化,还是两者互相融合?

1,bean.xml   


<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
                <list>
                        <value>myMessages</value>
                </list>
        </property>
</bean>
</beans>


2,资源文件myMessage.properties

userinfo=当前用户:[{0}],现在时间是:[{1}]
通过JDK提供的转码工具native2ascii.exe进行转换,可得到
myMessage_zh.properties

userinfo=\u5f53\u524d\u7528\u6237:[{0}],\u73b0\u5728\u65f6\u95f4\u662f\uff1a[{1}]

再写一个英语版的资源文件
myMessage_en.properties

userinfo=current user:[{0}],now is:[{1}]

深圳情缘 发表于 2006-7-25 10:03

最后,写一个测试类

3,测试类:SourceTest.java


1 package coffee;

2 import org.springframework.context.ApplicationContext;
3 import org.springframework.context.support.FileSystemXmlApplicationContext;
4 import java.util.*;

5 public class SourceTest
6 {
7         public static void main(String[] args)
8         {
9                 ApplicationContext ctx=new        FileSystemXmlApplicationContext("bean.xml");
10                Object[] obj = new Object[]{"coffee",new Date()};
11        //        String userinfo = ctx.getMessage("userinfo", obj,Locale.getDefault());
12                String userinfo = ctx.getMessage("userinfo", obj,Locale.US);
13                System.out.println(userinfo);
14        }
15 }


注:代码前面的数字,只是为了方便说明而添加的,不是程序中的代码。
      现在是把第11行代码注释掉,运行结果显示的是英文;
      
current user:,now is:
      如果保留第11行代码,而是把第12行代码注释掉,显示结果是中文的:

当前用户:,现在时间是:

[ 本帖最后由 深圳情缘 于 2006-7-25 10:18 编辑 ]

深圳情缘 发表于 2006-7-25 10:17

至于对于代码的解释,不烦稍加修改夏昕同志的书

这里声明了一个名为messageSource的Bean(注意对于Message定义,Bean ID必须为
messageSource,这是目前Spring的编码规约),对应类为ResourceBundleMessageSource,
目前Spring中提供了两个MessageSource接口的实现,即
ResourceBundleMessageSource和ReloadableResourceBundleMessageSource,后
者提供了无需重启即可重新加载配置信息的特性。
在配置节点中,我们指定了一个配置名“myMessages”。


这里,getMessage方法根据指定编码“Locale.US”加载了myMessages_en.properties文件。同
时请注意登录时间部分的变化(Locale不同,时间的输出格式也随之改变)。

String userinfo = ctx.getMessage("userinfo", obj,Locale.getDefault());
在原文中,作者的getMessage方法传入的参数是前面两个,我试过了,后面的Locale必须提供,否则出错
作者所说的是不需要提供最后一个参数,默认是系统语言,但实际上是需要提供的,默认的话也需要显示提供
Locale.getDefault()   
估计是因为Spring版本不同而导致的错误,因为我用的是最新版1.2.8版本
   也有可能是电子书制作方面出的问题,我看的是网上下载的电子版的PDF,一直不知道哪本好,所以先下载了来看看,spring开发指南,篇幅虽小,写的还真不错,浅显易懂,很适合我们入门的指导书。

powerwind 发表于 2006-8-11 09:23

感谢楼主分享,我也正在试着看这个文档,感觉不错
页: [1]
查看完整版本: spring入门之国际化支持