Spring之i18n配置与使用

Posted Joyce-Luo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring之i18n配置与使用相关的知识,希望对你有一定的参考价值。

Spring的i18n配置:
<!-- conf:i18n  -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	<property name="fallbackToSystemLocale" value="false" />
	<property name="useCodeAsDefaultMessage" value="true" />
	<property name="defaultEncoding" value="UTF-8" />
	<property name="cacheSeconds" value="60" />
	<property name="basenames">
		<list>
			<value>classpath:com/hupu/nac/i18n/message</value>
		</list>
	</property>
</bean>

Spring的i18n使用:

package com.joyce.enums;

import java.util.Locale;

/**
 * 语言枚举
 * @author Joyce.Luo
 * @date 2016-1-5 上午09:38:27
 * @version V3.0
 * @since Tomcat6.0,Jdk1.6
 * @copyright Copyright (c) 2016
 */
public enum EnumLang 
	ZH_CN("zh-CN", Locale.SIMPLIFIED_CHINESE),
	ZH_TW("zh-TW", Locale.TRADITIONAL_CHINESE),
	EN("en", Locale.ENGLISH),
	JA("ja", Locale.JAPAN);

	private String lang;
	private Locale locale;

	public String getLang() 
		return lang;
	

	public void setLang(String lang) 
		this.lang = lang;
	
	
	public Locale getLocale() 
		return locale;
	

	public void setLocale(Locale locale) 
		this.locale = locale;
	

	private EnumLang(String lang, Locale locale) 
		this.lang = lang;
		this.locale = locale;
	

	/**
	 * 根据ID获取枚举值
	 * @param lang ID
	 * @return ID对应的枚举值
	 * @author Joyce.Luo
	 * @date 2015-5-8 上午11:02:45
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2015
	 */
	public static Locale getLocale(String lang) 
		for (EnumLang enumLang : EnumLang.values()) 
			if (enumLang.getLang().equals(lang)) 
				return enumLang.getLocale();
			
		
		return Locale.ENGLISH;
	


package com.joyce.util.i18n;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.MessageSource;

import com.joyce.enums.EnumLang;
import com.joyce.util.CookieUtil;
import com.joyce.util.SpringUtil;

/**
 * Spring i18n
 * @author Joyce.Luo
 * @date 2016-1-5 上午09:26:03
 * @version V3.0
 * @since Tomcat6.0,Jdk1.6
 * @copyright Copyright (c) 2016
 */
public class I18NUtil 
	private static final Logger logger = Logger.getLogger(I18NUtil.class);
	private static MessageSource messageSource = (MessageSource) SpringUtil.getApplicationContext().getBean("messageSource");
	private static final Object[] objs = null;
	
	/**
	 * 获取国际化信息
	 * @param key 对应键
	 * @param locale 语言
	 * @param objects 参数
	 * @return 国际化信息
	 * @author Joyce.Luo
	 * @date 2016-1-5 上午10:19:00
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2016
	 */
	public static String getMessage(String key, Locale locale, Object...objects)
		if (StringUtils.isEmpty(key)) 
			return StringUtils.EMPTY;
		
		if (null == locale) 
			HttpServletRequest request = ServletActionContext.getRequest();
			if (null == request) 
				locale = Locale.ENGLISH;
			 else 
				String lang = CookieUtil.getCookieByName(request, "language").getValue();
				if (StringUtils.isEmpty(lang))
					locale = Locale.ENGLISH;
				 else 
					locale = EnumLang.getLocale(lang);
				
			
		
		logger.info("Spring I18 ---> key:[" + key + "],lang:[" + locale.getLanguage() + "],params:[" + objects + "]");
		return messageSource.getMessage(key, objects, locale);
	
	
	/**
	 * 获取国际化信息
	 * @param key 对应键
	 * @param locale 语言
	 * @return 国际化信息
	 * @author Joyce.Luo
	 * @date 2016-1-5 上午10:19:00
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2016
	 */
	public static String getMessage(String key, Locale locale)
		return getMessage(key, locale, objs);
	
	
	/**
	 * 获取国际化信息
	 * @param key 对应键
	 * @param objects 参数
	 * @return 国际化信息
	 * @author Joyce.Luo
	 * @date 2016-1-5 上午10:19:00
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2016
	 */
	public static String getMessage(String key, Object...objects)
		return getMessage(key, null, objects);
	
	
	/**
	 * 获取国际化信息
	 * @param key 对应键
	 * @param lang 语言
	 * @return 国际化信息
	 * @author Joyce.Luo
	 * @date 2016-1-6 上午11:30:03
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2016
	 */
	public static String getMessage(String key, String lang)
		return getMessage(key, EnumLang.getLocale(lang));
	
	
	/**
	 * 获取国际化信息
	 * @param key 对应键
	 * @return 国际化信息
	 * @author Joyce.Luo
	 * @date 2016-1-5 上午10:19:00
	 * @version V3.0
	 * @since Tomcat6.0,Jdk1.6
	 * @copyright Copyright (c) 2016
	 */
	public static String getMessage(String key)
		return getMessage(key, null, objs);
	


仅供参考,感兴趣者可深入研究,本人抱着引导入门的态度写这篇文章

以上是关于Spring之i18n配置与使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring BootSpringMVC进行i18n国际化支持:使用MessageSource

如何在 Spring boot 2 + Webflux + Thymeleaf 中配置 i18n?

在使用 JSR-303 验证表单时使用 I18n 消息

如何使用 spring-boot 和 thymeleaf 设置标准 i18n 语言环境?

Java国际化(i18n)

SpringBoot系列之i18n集成教程