java实现多语言配置i18n

1、创建资源包和资源文件

一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“inspectionJsonMsg”,则与中文、英文环境相对应的资源文件名则为: "inspectionJsonMsg_zh_CN.properties"  "inspectionJsonMsg_en_US.properties"

java实现多语言配置i18n_第1张图片

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)


你可能感兴趣的:(多语言i18n)