`
tcw290
  • 浏览: 22377 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring 国际化

 
阅读更多

覆写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环境中实现国际化。 首先,我们需要理解国际化的基本概念。国际化不仅仅是翻译文本,它涉及将应用程序中的所有文化特定元素,如日期格式、货币符号、数字...

    spring国际化实例

    Spring框架是Java开发中的一个核心库,它提供了一个广泛的功能集,包括依赖注入、面向切面编程、数据访问、Web应用程序开发以及我们今天关注的主题——国际化(i18n)。国际化是一个过程,使得软件能够适应不同语言...

    Spring国际化案例

    在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户的地区或语言设置提供相应的显示内容。本案例将深入探讨如何在Spring应用中实现国际化。 首先...

    spring 国际化 spring mvc

    Spring MVC 国际化实现详解 在 Spring MVC 框架中,实现国际化是一项非常重要的任务。国际化可以让我们的应用程序适应不同语言和地区,提高应用程序的可读性和可用性。本文将详细介绍如何使用 Spring MVC 实现国际...

    spring国际化jsp

    标题 "spring国际化jsp" 暗示我们讨论的是在Spring框架中实现Web应用程序的国际化(i18n)过程,特别是在使用JSP(JavaServer Pages)时。这通常涉及到资源包(properties文件)的使用,以存储不同语言的文本字符串...

    五 Spring 国际化问题

    Spring 国际化(i18n)是Spring框架中用于支持多语言环境的功能,它使得应用程序能够根据用户的地域设置显示相应的语言内容。在本文中,我们将深入探讨Spring的国际化实现,包括其工作原理、配置步骤以及实际应用。 ...

    Spring国际化Demo

    Spring国际化Demo

    Spring国际化Demo.zip

    Spring国际化Demo.zip

    spring国际化

    而Spring的国际化(i18n,Internationalization)功能则允许我们为不同地区和语言的用户提供定制的显示内容。 在Spring MVC中实现国际化,主要涉及以下几个关键步骤和概念: 1. **资源文件**:首先,我们需要创建...

    spring显示国际化信息

    在Spring框架中,国际化(Internationalization,简称i18n)是为支持多语言环境而设计的功能,使得应用程序能够根据用户所在的地域和语言提供相应的显示内容。本示例将详细介绍如何在Spring应用中实现国际化。 首先...

    Spring实现国际化的一个小例子

    在Spring框架中,实现国际化(Internationalization,简称i18n)是常见的需求,它使得应用程序可以根据用户所在的地区提供不同的语言版本。以下是一个详细的步骤,解释如何在Spring应用中实现国际化。 1. **理解...

    Spring国际化

    Spring和其它的框架一样,也提供了国际化功能,它是通过MessageSource接口来实现的 ApplicationContext接口继承了MessageSource 。 MessageSource接口方法

    解决Spring国际化文案占位符失效问题的方法

    解决Spring国际化文案占位符失效问题的方法 Spring国际化文案占位符是指在Spring框架中使用MessageSource来处理国际化文案,但是有时候占位符可能不会被正确地替换,导致文案显示不正确。这种情况下,需要了解...

    spring mvc 3 国际化(下)——简单自定义操作

    在Spring MVC 3中,国际化是一项重要的功能,它允许我们为不同的地区和语言提供定制的显示内容。在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的...

    Spring mvc 国际化

    Spring MVC的国际化(Internationalization)指的是将应用根据不同地域、语言习惯以及文化差异进行本地化的过程。这涉及了软件应用对多语言的支持,以便不同区域的用户能够以自己的母语使用软件。Spring MVC提供了...

    SpringBoot国际化.zip

    在这个"SpringBoot国际化.zip"压缩包中,我们看到与Spring Boot项目相关的各种文件,这表明该压缩包可能包含一个实现Spring Boot应用国际化的示例。让我们详细探讨一下Spring Boot如何实现国际化,以及相关文件的...

    spring2国际化demo

    spring2国际化的demo 用的是eclipse+myeclipse6.0GA 很简单 但是感觉不错 学习之后留着备用 里面加入用到了spring的泛型工厂 可以不用强制转换了

    Spring的国际化

    关于spring国际化的详细例子,很经典,一看便会!

    Spring Boot 国际化(i18n)配置demo.zip

    Spring Boot的国际化(i18n)配置是其强大功能的一部分,它允许开发人员为不同地区的用户提供本地化的应用体验。这个“Spring Boot 国际化(i18n)配置demo.zip”包含了一个演示如何在Spring Boot项目中实现i18n的示例...

Global site tag (gtag.js) - Google Analytics