技术开发 频道

Spring学习笔记: IoC中的国际化

【IT168技术文档】从这一章开始,我将把实例的项目打开一个CVS版本,不知谁能提供一个FTP空间?

3.1 前言
标题准确来说应该是“使用Spring中的IoC功能来实现我们所开发项目系统的国际化”,国际化不是针对IoC的,而是针对你开发的整个系统。

如果你使用过Eclipse的国际化,或者用过Eclipse的“外部化字符串”向导(Eclipse主菜单:源代码->外部化字符串),那么对Spring提供的国际化功能应该是非常容易理解,两者基本一样,或者说各种Java程序的国际化方式都基本一样。

先谈谈Eclipse国际化的两个组成部分:*.properties的资源文件、获取资源文件内容的Message类。

而Spring则和Eclipse的处理类似:资源文件两者是一样的,不同语言的翻译放在不同的资源文件里,连起名规则都一样;Eclipse的Message类要自己写(代码通用,复制以前项目的即可,或用Eclipse的向导生成一个也行),Spring则已经有写好的Message类,我们在IoC的xml文件里注册一下即可使用(也可以实现Spring的MessageSource接口,自己来写一个Message类,代码并不复杂,不过这没什么必要,用Spring提供的就行了)。

无论是Eclipse的Message类,还是Spring的自带的Message类,或是我们自己写一个Message类,都是使用JDK的java.util.ResourceBundle类来实现*.properties文件的读取。

3.2 简单实例
假设我们有如下程序,程序的作用是打印出一个字符串
package cn.com.chengang.spring; public class MessageTest { public static void main(String[] args) { String str = "ChenGang"; System.out.println(str); } }
现在,我们要让这个程序能够根据使用者的语言情况输出不同的字符,比如:对英文使用者输出“ChenGang”,对中文使用者输出“陈刚”,对台湾使用输出“陳剛”等等。这个需求的实现方法如下:

1、创建一系列的资源文件

在cn.com.chengang.spring包下创建以下文件:

(1)messages.properties(默认:英文),内容仅一句,如下

chengang=Giles

“chengang”是键值,Giles是要输出的英文字符串

(2)messages_zh_CN.properties(简体中文)

chengang=\u9648\u521A

“\u9648\u521A”是UNICODE码,对应的中文是“陈刚”

(3)messages_ zh_TW.properties(繁体中文)

chengang=\u9673\u525B

“\u9673\u525B”对应的中文是“陳剛”


附注:由于中文是要转换成UNICODE码,在编辑和阅读上有诸多不便,如果是用Eclipse做IDE,则有一个编辑资源文件的插件jinto,下载网址是http://www.guh-software.de/,用它打开的资源文件如下图所示,可以看到三个资源在一个界面反映了出来。

如果你不用Eclipse,而是用Editplugs+JDK的方式来编程(现在还有这样的原始人吗?),你也可以用JDK自带的native2ascii.exe程序来将中文字串转成UNICODE码。Ant中还提供了一个相应的任务:<native2ascii encoding="GBK" src="${src}" dest="${build}"/>,其中GBK是一个中国的字符集。

2、修改bean.xml

将Spring自带的org.springframework.context.support.ResourceBundleMessageSource类注册到bean.xml中,这个类的作用是获取资源文件的内容,注册到IoC的bean.xml文件中是为了自动获得此类的对象(Spring做了一些简化编程的处理)。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="Chinese" class="cn.com.chengang.spring.Chinese"/> <bean id="American" class="cn.com.chengang.spring.American"/> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>cn.com.chengang.spring.messages</value> </list> </property> </bean> </beans>




0
相关文章