覆写ResourceBundleMessage.
Spring留接口,其设计给力啊,很容易扩展。
package org.frame.base.message; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.context.support.ResourceBundleMessageSource; /** * * 扩展Spring的resourceBundleMessageSource * 使其支持中文,因为properties文件天生不支持中文,如果要其支持,需要转码,麻烦! * * 于是扩展一下,实现自动转码 */ public class ResourceBundleMessageSourceExtend extends ResourceBundleMessageSource { private static final String ENCODING = "GBK";// 注意属性文件使用GBK编码 private static final String NULL = "null"; /** cache the encoding key value * */ Map<String, String> encodingCache = new ConcurrentHashMap<String, String>( 20); /** * resolve no argus */ protected String resolveCodeWithoutArguments(String code, Locale locale) { String message = super.resolveCodeWithoutArguments(code, locale); return decodeString(message, ENCODING); } /** * resolve args * @see resolveCode(String code, Locale locale) */ protected MessageFormat createMessageFormat(String msg, Locale locale) { if (logger.isDebugEnabled()) { logger.debug("Creating MessageFormat for pattern [" + msg + "] and locale '" + locale + "'"); } msg = decodeString(msg, ENCODING); return new MessageFormat((msg != null ? msg : ""), locale); } /** * 转码 * @param msg * @param encode * @return */ private String decodeString(String message, String encode) { String encodMessage = encodingCache.get(message); if (encodMessage == null) { try { encodMessage = new String(message.getBytes("ISO8859-1"), encode); if (message != null) { encodingCache.put(message, encodMessage); } else { encodingCache.put(message, NULL); // log the code is not exist in properties } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return encodMessage; } }
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org/dtd/spring-beans.dtd "> <beans default-autowire="byName"> <!-- 国际化资源文件 --> <bean id="messageSource" class="org.frame.base.message.ResourceBundleMessageSourceExtend"> <property name="basenames"> <list> <value>message/message</value> <value>message/error</value> </list> </property> </bean> </beans>
配置文件内容
message.user.username = 用户名 ! message.user.password = 密码 ! message.user.context = 内容{0}真好 !
message.user.username = user name ! message.user.password = password !
package org.frame.base.message; import java.util.Locale; import org.springframework.context.MessageSource; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MessageSourceTest { public static void main(String[] args) { MessageSource messageSource = new ClassPathXmlApplicationContext("message/testMessage.xml"); String message1 = messageSource.getMessage("message.user.username", null, Locale.CHINESE); //String message3 = messageSource.getMessage("message.user.username", null, Locale.CHINESE); String message4 = messageSource.getMessage("message.user.context", new Object[]{"ycl"}, Locale.CHINESE); String message2 = messageSource.getMessage("error.user.validName", null, Locale.CHINESE); System.out.println(message1); System.out.println(message2); System.out.println(message4); } }
来源:http://a123159521.iteye.com/blog/1323317
相关推荐
spring国际化简单案例
spring国际化实例 下下来就能用 捐点分吧(就1分) 谢谢
spring 国际化的实例,想学习spring的同学,可以参考看看。
集成了springmvc的简单实例和spring国际化的demo
Spring国际化Demo
采用spring技术 实现项目中英文切换 国际化
Spring国际化Demo.zip
封装Spring实现国际化 非常具有实战价值
spring显示国际化信息!!!!这是一个完整的范例!!!!
Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法
Spring实现国际化的一个小例子
NULL 博文链接:https://ganliang13.iteye.com/blog/1204319
NULL 博文链接:https://gaojiewyh.iteye.com/blog/1756655
Spring2.5的国际化配置 基于浏览器语言的国际化配置 使用Spring的MVC,并且配置中有配置Resource文件 <!-- 资源文件绑定器 --> <bean id="messageSource" class="org.springframework.context.support....
本篇文章主要介绍了解决Spring国际化文案占位符失效问题的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring MVC 国际化的配置方法及使用,希望能对大家的学习、工作有帮助。
spring2国际化的demo 用的是eclipse+myeclipse6.0GA 很简单 但是感觉不错 学习之后留着备用 里面加入用到了spring的泛型工厂 可以不用强制转换了
NULL 博文链接:https://20142014.iteye.com/blog/1999130
关于spring国际化的详细例子,很经典,一看便会!
SpringMVC入门很简单之国际化,具体参考博文:http://www.cnblogs.com/liukemng/tag/SpringMVC/