springboot国际化

ResponseCodeI18n.java

import lombok.Getter;
import lombok.ToString;

/**
 * @Description: 多语言,国际化接口返回码枚举
 * @Author: dubin
 * @Date: 2019/9/26
 */
@Getter
@ToString
public enum  ResponseCodeI18n {

    QUESTIONNAIRE_SUCCESS(200,"response.code.questionnaire.success"),
    QUESTIONNAIRE_FAILED(104,"response.code.questionnaire.failed"),

    CREATE_WORKORDER_SUCCESS(200,"response.code.createWorkOrder.success"),
    CREATE_WORKORDER_FAILED(105,"response.code.createWorkOrder.failed"),
    CANCEL_WORKORDER_SUCCESS(200,"response.code.cancelWorkOrder.success"),
    CANCEL_WORKORDER_FAILED(106,"response.code.cancelWorkOrder.failed"),
    GET_WORKORDER_SUCCESS(200,"response.code.getWorkOrder.success"),

    DEVICE_DOES_NOT_EXIST(100,"response.code.device.doesNotExist"),
    BIND_DEVICE(200,"response.code.device.bindDevice"),
    BIND_DEVICE_SUCCESS(200,"response.code.device.bindDevice.success"),
    BINDED_DEVICE(101,"response.code.device.bindedDevice"),
    DEVICE_NUM_NOT_EMPTY(102,"response.code.device.deviceNumNotEmpty"),
    UNTYING_DEVICE_SUCCESS(200,"response.code.device.untyingDeviceSuccess"),
    UNTYING_DEVICE_FAILED(103,"response.code.device.untyingDeviceFailed"),

    SAP_ERROR(107,"response.code.sapError"),
    TOKEN_ERROR(108,"response.code.tokenError"),
    TOKEN_ERROR_EMPTY(109,"response.code.tokenErrorEmpty"),
    LOGIN_SUCCESS(200,"response.code.loginSuccess"),
    LOGIN_FAILED(115,"response.code.loginFailed"),
    REGISTER_SUCCESS(200,"response.code.registeredSuccessfully"),
    REGISTER_FAILED(116,"response.code.registeredFailed"),
    REGISTER_FAILED_USER(117,"response.code.registeredFailedUser"),
    WORK_ORDER_IMAGE(200,"response.code.workOrderImage"),
    WORK_ORDER_IMAGE_QUERY(200,"response.code.workOrderImage_Query"),
    EDIT_USER_SUCCESS(200,"response.code.editUserSuccessfully"),
    EDIT_USER_FAILED(118,"response.code.editUserFailed"),



    SUCCESS(1000, "api.response.code.success"),
    FAIL(-1, "api.response.code.fail");

    // 返回码
    private int code;

    // 返回信息
    private String msg;

    private ResponseCodeI18n(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}


ApiResultI18n.java

import lombok.Data;
import java.io.IOException;
import java.io.Serializable;

/**
 * @Description: 多语言, 国际化接口返回结果封装
 * @Author: junqiang.lu
 * @Date: 2019/1/24
 */
@Data
public class ApiResultI18n implements Serializable {

    private static final long serialVersionUID = 4518290031778225230L;

    /**
     * 返回码,1000 正常
     */
    private int code = 1000;

    /**
     * 返回信息
     */
    private String msg = "成功";

    /**
     * 返回数据
     */
    private Object data;

    /**
     * api 返回结果
     */
    private ApiResultI18n() {}

    /**
     * api 返回结果,区分多语言
     *
     * @param language 语言类型,eg: en_us 表示美式英文
     */
    public ApiResultI18n(String language){
        this.code = ResponseCodeI18n.SUCCESS.getCode();
        language = LanguageEnum.getLanguageType(language);
        try {
            this.msg = I18nMessageUtil.getMessage(language,ResponseCodeI18n.SUCCESS.getMsg(),"SUCCESS");
        } catch (IOException e) {
            this.msg = "SUCCESS";
        }
    }

    /**
     * 获取成功状态结果,区分多语言(默认简体中文)
     *
     * @param language 语言类型,eg: en_us 表示美式英文
     * @return
     */
    public static ApiResultI18n success(String language) {
        return success(null, language);
    }

    /**
     * 获取成功状态结果,区分多语言(默认简体中文)
     *
     * @param data 返回数据
     * @param language 语言类型,eg: en_us 表示美式英文
     * @return
     */
    public static ApiResultI18n success(Object data, String language) {
        ApiResultI18n result = new ApiResultI18n(language);
        result.setData(data);
        return result;
    }

    /**
     * 获取失败状态结果,区分多语言(默认简体中文)
     *
     *
     * @param s
     * @param language 语言类型,eg: en_us 表示美式英文
     * @return
     */
    public static ApiResultI18n failure(String s, String language) {
        return failure(ResponseCodeI18n.FAIL.getCode(), ResponseCodeI18n.FAIL.getMsg(), null, language);
    }

    /**
     * 获取失败结果,区分多语言(默认中文)
     *
     * @param responseCodeI18n 返回码
     * @param language 语言类型
     * @return
     */
    public static ApiResultI18n failure(ResponseCodeI18n responseCodeI18n, String language) {
        return failure(responseCodeI18n.getCode(), responseCodeI18n.getMsg(), null, language);
    }
    /**
     * 获取结果,区分多语言(默认中文) 通用
     *
     * @param responseCodeI18n 返回码
     * @param language 语言类型
     * @return
     */
    public static ApiResultI18n myResponse(ResponseCodeI18n responseCodeI18n, Object data, String language) {
        return failure(responseCodeI18n.getCode(), responseCodeI18n.getMsg(), data, language);
    }

    /**
     * 获取失败状态结果,区分多语言(默认中文)
     *
     * @param code 返回状态码
     * @param msg 错误信息
     * @param language 语言类型,eg: en 表示英文
     * @return
     */
    public static ApiResultI18n failure(int code, String msg, String language) {
        return failure(code ,msg, null, language);
    }

    /**
     * 获取失败返回结果,区分多语言(默认中文)
     *
     * @param code 错误码
     * @param msg 错误信息
     * @param data 返回结果
     * @param language 语言类型,eg: en 表示英文
     * @return
     */
    public static ApiResultI18n failure(int code, String msg, Object data, String language) {
        ApiResultI18n result = new ApiResultI18n(language);
        language = LanguageEnum.getLanguageType(language);
        try {
            msg = I18nMessageUtil.getMessage(language, msg, msg);
        } catch (IOException e) {
            msg = "Error";
        }
        result.setCode(code);
        result.setMsg(msg);
        result.setData(data);
        if (data instanceof String) {
            String m = (String) data;
            if (!m.matches("^.*error$")) {
                m += "error";
            }
        }
        return result;
    }
}


package com.irootech.customercloud.common.util.i18nUtil;

import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;

/**
 * @Description: 多语言国际化消息工具类
 * @Author: dubin
 * @Date: 2019/9/26
 */
public class I18nMessageUtil {

    private static MessageSourceAccessor accessor;
    private static final String PATH_PARENT = "classpath:i18n/";
    private static final String SUFFIX = ".properties";
    private static ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

    private I18nMessageUtil(){
    }

    /**
     * 初始化资源文件的存储器
     * 加载指定语言配置文件
     *
     * @param language 语言类型(文件名即为语言类型,eg: en_us 表明使用 美式英文 语言配置)
     */
    private static void initMessageSourceAccessor(String language) throws IOException {
        /**
         * 获取配置文件名
         */
        Resource resource = resourcePatternResolver.getResource(PATH_PARENT + language + SUFFIX);
        String fileName = resource.getURL().toString();
        int lastIndex = fileName.lastIndexOf(".");
        String baseName = fileName.substring(0,lastIndex);
        /**
         * 读取配置文件
         */
        ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
        reloadableResourceBundleMessageSource.setBasename(baseName);
        reloadableResourceBundleMessageSource.setCacheSeconds(5);
        reloadableResourceBundleMessageSource.setDefaultEncoding("UTF-8");
        accessor = new MessageSourceAccessor(reloadableResourceBundleMessageSource);
    }

    /**
     * 获取一条语言配置信息
     *
     * @param language 语言类型,zh_cn: 简体中文, en_us: 英文
     * @param message 配置信息属性名,eg: api.response.code.user.signUp
     * @param defaultMessage 默认信息,当无法从配置文件中读取到对应的配置信息时返回该信息
     * @return
     * @throws IOException
     */
    public static String getMessage(String language, String message, String defaultMessage) throws IOException {
        initMessageSourceAccessor(language);
        return accessor.getMessage(message,defaultMessage,LocaleContextHolder.getLocale());
    }
}



package com.irootech.customercloud.common.util.i18nUtil;

import lombok.Getter;
import lombok.ToString;
import org.springframework.util.StringUtils;

/**
 * @Description: 国际化 语言枚举类
 * @Author: dubin
 */
@Getter
@ToString
public enum LanguageEnum {

    /**
     * 美式英文
     */
    LANGUAGE_EN_US("en_US"),
    /**
     * 简体中文
     */
    LANGUAGE_ZH_CN("zh_CN");

    private String language;

    private LanguageEnum(String language){
        this.language = language;
    }

    /**
     * 获取指定语言类型(如果没有对应的语言类型,则返回中文)
     *
     * @param language 语言类型
     * @return
     */
    public static String getLanguageType(String language){
        if (StringUtils.isEmpty(language)) {
            return LANGUAGE_ZH_CN.language;
        }
        for (LanguageEnum languageEnum : LanguageEnum.values()) {
            if (languageEnum.language.equalsIgnoreCase(language)) {
                return languageEnum.language;
            }
        }
        return LANGUAGE_ZH_CN.language;
    }

}


# language = en_us(美式英语)

# response code
response.code.questionnaire.failed = Failed to fill in the satisfaction survey
response.code.questionnaire.success = Successful completion of satisfaction survey

response.code.createWorkOrder.success = New Order Successful
response.code.createWorkOrder.failed = New order failed
response.code.cancelWorkOrder.success = Cancel work order successfully
response.code.cancelWorkOrder.failed = Cancel work order failed
response.code.getWorkOrder.success = Successful query work order details

response.code.device.doesNotExist = Device does not exist
response.code.device.bindDevice = You can bind this device
response.code.device.bindDevice.success = Device binding successfully
response.code.device.bindedDevice = The device is bound
response.code.device.deviceNumNotEmpty = Device number cannot be empty
response.code.device.untyingDeviceSuccess = Unbind device successful
response.code.device.untyingDeviceFailed = Unbundling device failed

response.code.sapError=Failed to call CRM interface
response.code.tokenError=Token error or invalid
response.code.tokenErrorEmpty=Token cannot be empty
response.code.loginSuccess=Login successfully
response.code.loginFailed=Login failed
response.code.registeredSuccessfully=Registered successfully
response.code.registeredFailed=Registration failed
response.code.registeredFailedUser=User already exists
response.code.workOrderImage=Work order associated picture successful
response.code.workOrderImage_Query=The query is successful
response.code.editUserSuccessfully=Modify personal information successfully
response.code.editUserFailed=Failed to modify personal information






# language = zh_cn(简体中文)

# response code
response.code.questionnaire.failed = 填写满意度调查失败
response.code.questionnaire.success = 填写满意度调查成功

response.code.createWorkOrder.success = 新建订单成功
response.code.createWorkOrder.failed = 新建订单失败
response.code.cancelWorkOrder.success = 取消工单成功
response.code.cancelWorkOrder.failed = 取消工单失败
response.code.getWorkOrder.success = 查询工单详情成功

response.code.device.doesNotExist = 设备不存在
response.code.device.bindDevice = 可以绑定此设备
response.code.device.bindDevice.success = 绑定设备成功
response.code.device.bindedDevice = 已绑定该设备
response.code.device.deviceNumNotEmpty = 设备号不能为空
response.code.device.untyingDeviceSuccess = 解绑设备成功
response.code.device.untyingDeviceFailed = 解绑设备失败

response.code.sapError=调取CRM接口失败
response.code.tokenError=token错误或已失效
response.code.tokenErrorEmpty=token不能为空
response.code.loginSuccess=登录成功
response.code.loginFailed=登录失败
response.code.registeredSuccessfully=注册成功
response.code.registeredFailed=注册失败
response.code.registeredFailedUser=用户已存在
response.code.workOrderImage=工单关联图片成功
response.code.workOrderImage_Query=查询成功
response.code.editUserSuccessfully=修改个人信息成功
response.code.editUserFailed=修改个人信息失败



引用

return ApiResultI18n.myResponse(ResponseCodeI18n.BIND_DEVICE,null,language);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值