覆写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环境中实现国际化。 首先,我们需要理解国际化的基本概念。国际化不仅仅是翻译文本,它涉及将应用程序中的所有文化特定元素,如日期格式、货币符号、数字...
Spring框架是Java开发中的一个核心库,它提供了一个广泛的功能集,包括依赖注入、面向切面编程、数据访问、Web应用程序开发以及我们今天关注的主题——国际化(i18n)。国际化是一个过程,使得软件能够适应不同语言...
在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户的地区或语言设置提供相应的显示内容。本案例将深入探讨如何在Spring应用中实现国际化。 首先...
Spring MVC 国际化实现详解 在 Spring MVC 框架中,实现国际化是一项非常重要的任务。国际化可以让我们的应用程序适应不同语言和地区,提高应用程序的可读性和可用性。本文将详细介绍如何使用 Spring MVC 实现国际...
标题 "spring国际化jsp" 暗示我们讨论的是在Spring框架中实现Web应用程序的国际化(i18n)过程,特别是在使用JSP(JavaServer Pages)时。这通常涉及到资源包(properties文件)的使用,以存储不同语言的文本字符串...
Spring 国际化(i18n)是Spring框架中用于支持多语言环境的功能,它使得应用程序能够根据用户的地域设置显示相应的语言内容。在本文中,我们将深入探讨Spring的国际化实现,包括其工作原理、配置步骤以及实际应用。 ...
Spring国际化Demo
Spring国际化Demo.zip
而Spring的国际化(i18n,Internationalization)功能则允许我们为不同地区和语言的用户提供定制的显示内容。 在Spring MVC中实现国际化,主要涉及以下几个关键步骤和概念: 1. **资源文件**:首先,我们需要创建...
在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户所在的地域和语言提供相应的显示内容。本示例将详细介绍如何在Spring应用中实现国际化。 首先...
在Spring框架中,实现国际化(Internationalization,简称i18n)是常见的需求,它使得应用程序可以根据用户所在的地区提供不同的语言版本。以下是一个详细的步骤,解释如何在Spring应用中实现国际化。 1. **理解...
Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法
解决Spring国际化文案占位符失效问题的方法 Spring国际化文案占位符是指在Spring框架中使用MessageSource来处理国际化文案,但是有时候占位符可能不会被正确地替换,导致文案显示不正确。这种情况下,需要了解...
在Spring MVC 3中,国际化是一项重要的功能,它允许我们为不同的地区和语言提供定制的显示内容。在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的...
Spring MVC的国际化(Internationalization)指的是将应用根据不同地域、语言习惯以及文化差异进行本地化的过程。这涉及了软件应用对多语言的支持,以便不同区域的用户能够以自己的母语使用软件。Spring MVC提供了...
在这个"SpringBoot国际化.zip"压缩包中,我们看到与Spring Boot项目相关的各种文件,这表明该压缩包可能包含一个实现Spring Boot应用国际化的示例。让我们详细探讨一下Spring Boot如何实现国际化,以及相关文件的...
spring2国际化的demo 用的是eclipse+myeclipse6.0GA 很简单 但是感觉不错 学习之后留着备用 里面加入用到了spring的泛型工厂 可以不用强制转换了
关于spring国际化的详细例子,很经典,一看便会!
Spring Boot的国际化(i18n)配置是其强大功能的一部分,它允许开发人员为不同地区的用户提供本地化的应用体验。这个“Spring Boot 国际化(i18n)配置demo.zip”包含了一个演示如何在Spring Boot项目中实现i18n的示例...