package com.vetti.common.config; import cn.hutool.core.util.StrUtil; import com.vetti.common.enums.InternationalLangTypeEnum; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /** * 国际化配置属性 * * @author wangxiangshun */ @Data @Component @ConfigurationProperties(prefix = "vetti.international") public class InternationalProperties { /** * 是否启用,默认为False */ private boolean enable = true; /** * 请求语言参数位置(HEADER/PARAM),默认为HEADER */ private RequestLangParamPosition paramPosition = RequestLangParamPosition.HEADER; /** * 请求语言参数名称,默认为lang */ private String paramName = "lang"; /** * 获取请求语言 * * @return 请求语言 */ public String getLang() { HttpServletRequest request = null; try { request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } catch (Exception ex) { // ignore } if (null == request) { return null; } String lang; if (paramPosition == RequestLangParamPosition.HEADER) { lang = request.getHeader(paramName); } else { lang = request.getParameter(paramName); } //语言类型特殊转换 if(StrUtil.isNotEmpty(lang)){ lang = lang.replaceAll("-Hans-","_").replaceAll("-Hant-","_"). replaceAll("_Hans_","_").replaceAll("_Hant_","_").replaceAll("-","_"); if(lang.contains("en") || lang.contains("EN")){ lang = InternationalLangTypeEnum.INTERNATIONAL_LANG_TYPE_ENUM_EN.getCode(); }else if(lang.contains("zh") || lang.contains("ZH")){ lang = InternationalLangTypeEnum.INTERNATIONAL_LANG_TYPE_ENUM_ZH.getCode(); } }else { lang = InternationalLangTypeEnum.INTERNATIONAL_LANG_TYPE_ENUM_EN.getCode(); } return lang; } /** * 请求语言参数位置 */ public enum RequestLangParamPosition { HEADER, PARAM } }