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. echarts统计图踩坑合集

    1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...

  2. CISP/CISA 每日一题 22

    CISSP 每日一题(答)What should be done to verify patcheshave been applied? Auditpatches, or use a vulnerab ...

  3. Windows下多个Mysql实例配置主从

    序:     网上有很多类似的文章,也是各种百度出来的,但是对于多数刚开始接触MYSQL主从的小白来说,网上文章的代码里面很多技术点都没有理解,有跌打误撞碰上的,但多数都是这篇文章卡主了,换篇文章接着 ...

  4. 51NOD——T 1079 中国剩余定理

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1079 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难 ...

  5. [Redux] Understand Redux Higher Order Reducers

    Higher Order Reducers are simple reducer factories, that take a reducer as an argument and return a ...

  6. 解决XCODE配置LLVM环境出现的问题

    问题描写叙述:在LLVM整合进XCODE的过程中出现符号没有定义导致出现未决函数或方法.但使用终端编译链接生成程序没有问题. 问题产生原因:未引用响应的LLVM库与系统库,以及编译器设置.连接器设置不 ...

  7. ListView-divider 分割线的设置

    1.去掉分割线 android:divider="@null" 2.设置分割线颜色跟宽度 android:divider="#19000000" android ...

  8. groupbox里面添加Form

    /// <summary> /// 动态加载dll /// 反射 /// </summary> private void dynamicDll() { string dllNa ...

  9. 多线程在python中的使用 thread

    近期想学习研究一下python中使用多线程,来提高python在爬虫项目中的效率. 如今我们在网页上查询到在python中使用的多线程的使用大多数都是使用的threading模块,可是python中另 ...

  10. Codeforces Beta Round #24 D. Broken robot (打表找规律)

    题目链接: 点击我打开链接 题目大意: 给你 \(n,j\),再给出 \(m[0]\) 的坐标和\(a[0]-a[n-1]\) 的坐标. 让你输出 \(m[j]\) 的坐标,其中 \(m[i]\) 和 ...