通常处理异常返回语言是以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方式进行调用,然后进行处理
其实自我感觉就是枚举方式进行统一处理