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配置与使用的更多相关文章

  1. spring 国际化i18n配置

    i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改 ...

  2. Spring MVC国际化配置

    Spring MVC国际化配置 前言 项目开发中要考虑支持国际化,框架选用的是Spring MVC框架,那么问题来了Spring MVC如何配置并实现国际化. 实现过程(Maven项目) 对于Spri ...

  3. 基于注解的Spring多数据源配置和使用

    前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备.由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多 ...

  4. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  5. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  6. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  7. 基于xml的Spring多数据源配置和使用

    上一篇讲了<基于注解的Spring多数据源配置和使用>,通过在类或者方法上添加@DataSource注解就可以指定某个数据源.这种方式的优点是控制粒度细,也更灵活. 但是当有些时候项目分模 ...

  8. 基于注解的Spring AOP的配置和使用

    摘要: 基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不 ...

  9. spring的定时任务配置

    本文来源于:http://myspace1916.iteye.com/blog/1570707 也可参考:http://www.oschina.net/question/8676_9032 (个人只是 ...

随机推荐

  1. JSTL之C标签学习

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  2. jQuery高级选择器和其等价方法

    jQuery选择器和css一样,但兼容性更好 <body> <p>p1</p> <p>p1</p> <p>p1</p> ...

  3. Flask项目之手机端租房网站的实战开发(十四)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  4. canvas.toDataURL() gives “Security Error” in IE 11

    http://stackoverflow.com/questions/30101143/canvas-todataurl-gives-security-error-in-ie-11

  5. 洛谷 P2677 超级书架 2

    P2677 超级书架 2 题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有 ...

  6. 基于Eclipse的Android JNI层測试应用开发过程记录

    前言 本文记录一个Java层与JNI层參数与数据交互的应用程序开发过程.为实现一个功能完整的带Java与JNI的应用程序打下基础. 本文如果读者已搭建好Android的Eclipse与NDK开发环境, ...

  7. AAC编解码

    AAC编码可以使用faac /** 初始化 @param sampleRate 音频采样率 @param channels 通道数 @param bitSize 音频采样精度 16 */ - (voi ...

  8. PatentTips - Method, apparatus and system for instructing a virtual device from a virtual machine

    BACKGROUND OF THE INVENTION A virtual machine (VM) may be or include a framework or environment crea ...

  9. Jedis源码分析

    http://blog.csdn.net/luyee2010/article/details/17580381

  10. Android 一个异步SocketHelper

    发送流程:首先定义一个缓冲池,发送数据时仅仅是将待发送的数据加入到缓冲池中,再由后台的工作线程从缓冲池中取得待发送数据进行发送.可能某些情况下在数据发送完成时需要做一些处理(比如写日志),便定义了一个 ...