关于国际化语言I18工具类多语言处理

通常处理异常返回语言是以code以及message两种方式进行语句返回接下来就是对其两种进行分析

首先是由code方式进行将异常语句返回 首先创建工具类I18n

package com.seedeer.common.i18n;

import com.seedeer.common.util.ParamUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Locale;

/**
 * @Description i18N工具类

@Component
public class I18NUtil {

    @Autowired
    private I18NMessageResource i18NMessageResource;

    private static final String PDA_ZH_LANGUAGE = "zh_CN";

    private static I18NUtil i18NUtil;

    @PostConstruct
    public void init() {
        i18NUtil = this;
        i18NUtil.i18NMessageResource = this.i18NMessageResource;
    }

    public static boolean isChinese(){
        if (StringUtils.equals(LocaleContextHolder.getLocale().getLanguage(), Locale.ENGLISH.getLanguage())) {
            return false;
        }
        return true;
    }
    /**
     * @Description 根据总参CODE和子参CODE查询当前语言下的翻译
     * @Author wangqiang
     * @Date 2018/7/20 13:45
     * @Param [paramCode, paramDetailCode]
     * @return java.lang.String
     */
    public static String getParamMessage(String paramCode, String paramDetailCode){
       return ParamUtil.getLanuageNameForParamDetail(paramCode, paramDetailCode, LocaleContextHolder.getLocale());
    }

    /**
     * @Description 系统多语言翻译
     * @Author wangqiang
     * @Date 2018/7/20 13:47
     * @Param [code]
     * @return java.lang.String
     */
    public static String getMessage(String code){
        return i18NUtil.i18NMessageResource.getMessage(code, null, LocaleContextHolder.getLocale());
    }

    /**
     * @Description 系统多语言翻译,加参数
     * @Author wangqiang
     * @Date 2018/7/20 13:47
     * @Param [code, args]
     * @return java.lang.String
     */
    public static String getMessage(String code, Object... args){
        return i18NUtil.i18NMessageResource.getMessage(code, args, LocaleContextHolder.getLocale());
    }

    /**
     * @Description PDA 获取多语言翻译
     * @Author wangqiang
     * @Date 2018/7/20 13:46
     * @Param [language, code]
     * @return java.lang.String
     */
    public static String getPdaMessage(String language, String code){
        return getPdaMessage(language, code, new Object[]{});
    }

    /**
     * @Description PDA 获取多语言翻译,加参数
     * @Author wangqiang
     * @Date 2018/7/20 13:46
     * @Param [language, code]
     * @return java.lang.String
     */
    public static String getPdaMessage(String language, String code, Object... args){
        //默认英文
        Locale locale = Locale.US;
        if (StringUtils.equals(PDA_ZH_LANGUAGE, language)) {
            locale = Locale.SIMPLIFIED_CHINESE;
        }
        return i18NUtil.i18NMessageResource.getMessage(code, args, locale);
    }
}

加粗样式
其次接下来就是编写code格式,通常通过工具类直接调用code可以快速返回异常语句,当然如果我们仅仅只是想看到异常信息而已,其他不需要

public interface I18NMessageCode {

写代码类似于枚举的方式,将其代码写入,并且通过调用,这样就可以直接实现通过code的方式将其异常信息返回,当然判断当前语言环境在于自己方法,我是通过cookie的获取方式,判断当前环境,进行处理
}

另一种方式就是指通过message的方式将其异常进行返回,但是可以携带参数,通过本地上下文获取,判断语言环境

package com.seedeer.common.i18n;

import com.seedeer.sdwms.entity.Languages;
import com.seedeer.sdwms.languages.service.LanguagesService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.support.AbstractMessageSource;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;

import java.text.MessageFormat;
import java.util.Locale;

/**
 * @Description 多语言环境自定义MessageResource
 **/
public class I18NMessageResource extends AbstractMessageSource implements ResourceLoaderAware {

    private ResourceLoader resourceLoader;

    @Autowired
    private LanguagesService languagesService;

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader());
    }

    @Override
    protected MessageFormat resolveCode(String code, Locale locale) {
        Languages languages = languagesService.findJavaLanguagesByCode(code);
        String message = StringUtils.EMPTY;
        if (null == languages) {
            message = code;
        } else {
            //英文
            if (StringUtils.equals(locale.getLanguage(), Locale.ENGLISH.getLanguage())) {
                message = languages.getNameEn();
            } else {//默认中文
                message = languages.getName();
            }
        }
        MessageFormat messageFormat = new MessageFormat(message, locale);
        return messageFormat;
    }
}

基本正常情况下分为两种

直接通过code方式进行调用.然后进行处理
在这里插入图片描述
其次通过message方式进行调用,然后进行处理
在这里插入图片描述

其实自我感觉就是枚举方式进行统一处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值