k3oa Spring的MVC模式I18N的配置及使用方法 (转http://dannyyuan.blog.51cto.com/212520/160495)

Coordinator
Apr 18, 2013 at 3:47 AM
Spring的MVC模式I18N的配置及使用方法
2009-05-24 21:02:28
标签:MVC Spring I18N 休闲 配置及使用

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dannyyuan.blog.51cto.com/212520/160495


Spring的MVC模式I18N的配置及使用方法

某个加载xml配置文件配置,如bean.xml。
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages</value>
</list>
</property>
</bean>


通过上下文可以调用getMessage来实现I18N。(一种直接加载message上下文的方法:ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml");)

Object[] arg = new Object[]{};
//以系统默认Locale加载信息(对于中文WinXP而言,默认为zh_CN)
String msg = ctx.getMessage("userinfo", arg, Locale.zh_CN);
System.out.println("Message is ===> "+msg);

代码中,我们将一个Object数组arg作为参数传递给ApplicationContext.getMessage方法,这个

参数中包含了出现在最终文字信息中的可变内容,ApplicationContext将根据参数中的Locale信息对其进

行处理(如针对不同Locale设定日期输出格式),并用其替换配置文件中的{n}标识(n代表参数数组中的

索引,从1开始)。


注意转码过程中产生的编码问题,一种比较简单的解决办法是通过JDK提供的转码工具native2ascii.exe进行转换。执行:

native2ascii messages_zh_CN.properties msg.txt


再用msg.txt文件替换Messages_zh_CN.properties文件。我们可以看到现在的

Messages_zh_CN.properties变成了如下形式:

userinfo=\u5f53\u524d\u767b\u5f55\u7528\u6237: [{0}]\u767b\u5f55\u65f6\u95f4:[{1}]

(通过在native2ascii命令后追加-reverse参数,可以将文件转回本地格式)

实际开发中,我们可以通过Apache Ant的Native2Ascii任务进行批量转码。如:

<native2ascii encoding="GBK" src="${src}" dest="${build}"/>

getMessage方法还有一个无需Locale参数的版本,JVM会根据当前系统的Locale设定进行相应处

理。可以通过在JVM启动参数中追加“-Duser.language=en”来设定当前JVM语言类型,通过JVM级的

设定,结合国际化支持功能,我们可以较为简单的实现多国语言系统的自动部署切换。

也可以通过资源访问的方式来实现对属性设置的访问。ApplicationContext.getResource方法提供了对资源文件访问支持,如:

Resource rs = ctx.getResource("classpath:config.properties");

File file = rs.getFile();

上例从CLASSPATH根路径中查找config.properties文件并获取其文件句柄。

getResource方法的参数为一个资源访问地址,如:

file:C:/config.properties

/config.properties

classpath:config.properties

注意getResource返回的Resource并不一定实际存在,可以通过Resource.exists()方法对其进行判断。

而在页面处理中,也可以用到i18n的信息串。

jsp中使用i18n的message:

<spring:message code="msg_code"/>

本文出自 “守望者的技术日记和六..” 博客,请务必保留此出处