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. 31.Node.js 常用工具 util

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaS ...

  2. react radio onchange事件点击无效

    记: 项目需求:   页面中radio默认选中        第一次进去页面   点击radio的时候不管怎样点击    都是选中 连onChange事件都没触发 进入页面  点击刷新   点击rad ...

  3. Codeforces 919F. A Game With Numbers(博弈论)

      Imagine that Alice is playing a card game with her friend Bob. They both have exactly 88 cards and ...

  4. 手把手教你用NDK9编译ffmpeg2.4.2

    编译环境: 32位 ubuntu12.10 android-ndk-r9c-linux-x86.tar.bz2 ffmpeg-2.4.2.tar.bz2 网上的教程都是以低版本号ffmpeg编译居多. ...

  5. USB串行端口

    USB-SERIAL CH341A(COM22)USB串行端口

  6. 原生js大总结八

    071.如何组织事件冒泡   利用事件对象属性:stopPropagation 和 cancelBubble   stopPropagetion是一个方法:e.stopPropagetion();   ...

  7. C# exe文件 添加到windows 服务

    我们运行.net的发布工具installutil.exe来添加到windows服务里面(该工具默认在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下) ...

  8. hbase单机安装和简单使用

    电脑太卡了,使用不了hadoop和hdfs了,所以今天安装了一个伪分布式,数据存储在本地磁盘,也没有向HDFS中存,也没有使用自己的zookeeper,安装过程中还出了点小问题,总结一下,免得忘了. ...

  9. 【CS Round #48 (Div. 2 only)】Water Volume

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举0在哪个位置就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc++.h> us ...

  10. java中的switch用String作为条件

    在开发java程序的过程中,我们遇到了条件推断首选就是switch,可是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解    1.enum是一 ...