1、创建资源包和资源文件
一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“inspectionJsonMsg”,则与中文、英文环境相对应的资源文件名则为: "inspectionJsonMsg_zh_CN.properties" "inspectionJsonMsg_en_US.properties"
2、资源文件的书写格式
资源文件的内容通常采用"关键字=值"的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,属性(properties)文件是不能保存中文的,对于像中文这样的非ACSII字符,须先进行编码
例如:
国际化的中文环境的properties文件
国际化的英文环境的properties文件
3、在Spring配置文件中增加多语言配置,applicationContext.xml
language/inspectionJsonMsg
4、如何使用
(1)编写常量类
public class InspectionConst {
//设备查询成功
public static final String INSPECTION_DEVICE_QUERY_SUCCESS = "ny.spms.java.inspection.device.query.success";
//设备查询失败
public static final String INSPECTION_DEVICE_QUERY_ERROR = "ny.spms.java.inspection.device.query.error";
}
(2)编写I18n工具类,I18nUtil.java
package com.hikvision.energy.util.i18n;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.i18n.LocaleContextHolder;
import com.hikvision.energy.core.util.AppContext;
import java.util.Locale;
/**
* 多语言查询value工具类
*
* @author wanjiadong
* @date 2017-11-6
*
*/
public class I18nUtil {
private static MessageSource messageSource;
private final static Logger log = LoggerFactory.getLogger(I18nUtil.class);
static {
messageSource = AppContext.getBean("messageSource");
}
/**
* 根据CODE查询,默认无通配参数,Local跟随当前cookie
* @Author: wanjiadong
* @Description:
* @Date: 2017-11-6
* @param: code
*/
public static String getMessage(String code){
return getMessage(code,null,getLocal());
}
public static String getMessage(String code,Locale locale){
return getMessage(code,null,locale);
}
/**
* 根据CODE查询,自定义默认值,默认无通配参数,Local跟随当前cookie
* @Author: wanjiadong
* @Description:
* @Date: 2017-11-6
* @param: code
*/
public static String getMessage(String code,String defaultMessage){
return getMessage(code,null,defaultMessage,getLocal());
}
/**
* 根据CODE和args查询,Local跟随当前cookie
* @Author: wanjiadong
* @Description:
* @Date: 2017-11-6
* @param: code
* @param: args 通配符的参数
*/
public static String getMessage(String code,Object[] args){
return getMessage(code,args,getLocal());
}
public static String getMessage(String code,Object[] args,String defaultMessage,Locale locale){
return messageSource.getMessage(code,args,defaultMessage,locale);
}
public static String getMessage(String code, Object[] args, Locale locale){
try{
return messageSource.getMessage(code,args,locale);
}catch (Exception e){
log.error("Query message value by key[{}] error. The reason is:"+e.getMessage(),code);
return null;
}
}
public static String getMessage(MessageSourceResolvable resolvable, Locale locale){
try{
return messageSource.getMessage(resolvable,locale);
}catch (Exception e){
log.error("Query message value error. The reason is:"+e.getMessage());
return null;
}
}
//解析用户区域
public static Locale getLocal() {
return LocaleContextHolder.getLocale();
}
}
(3)具体使用:
I18nUtil.getMessage(InspectionConst.TEMPORARY_JOB_OVER_BEGIN_TIME, new Object[]{InspectionConst.TEMPORARA_TIME})或
I18nUtil.getMessage(InspectionConst.INSPECTION_TEMPORARY_JOB_ADD_SUCCESS)