package com.whyc.config;
|
|
import com.whyc.constant.YamlProperties;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.CommonUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.lang.NonNull;
|
import org.springframework.web.servlet.LocaleResolver;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.util.Locale;
|
|
/**
|
* i18n自定义LocaleResolver
|
*/
|
@Configuration
|
public class I18nLocaleResolver implements LocaleResolver {
|
|
@Autowired
|
private HttpServletRequest request;
|
|
public Locale getLocal() {
|
return resolveLocale(request);
|
}
|
|
/**
|
* 从HttpServletRequest中获取Locale
|
* 优先级:
|
* 配置文件指定>从request指定lang>从session中获取lang>本机语言环境获取Locale
|
*
|
* @param httpServletRequest httpServletRequest
|
* @return 语言Local
|
*/
|
@Override
|
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
|
//如果没有就使用默认的(根据主机的语言环境生成一个 Locale
|
Locale locale = Locale.getDefault();
|
//配置文件指定
|
String i18nLanguage = YamlProperties.i18nLanguage;
|
if(StringUtils.isNotBlank(i18nLanguage)){
|
if(i18nLanguage.startsWith("zh")){
|
locale = Locale.CHINESE;
|
}else{
|
locale = Locale.US;
|
}
|
}
|
|
else if(httpServletRequest!=null) {
|
//获取请求中的语言参数
|
String language = httpServletRequest.getParameter("lang");
|
//从session中获取lang
|
String language2 = (String) ActionUtil.getSession().getAttribute("lang");
|
//如果请求的链接中携带了 国际化的参数
|
if (!StringUtils.isEmpty(language)) {
|
//zh_CN
|
String[] s = language.split("_");
|
//国家,地区
|
locale = new Locale(s[0], s[1]);
|
} else if (!StringUtils.isEmpty(language2)) {
|
if ((language2.startsWith("zh"))) {
|
locale = Locale.SIMPLIFIED_CHINESE;
|
} else { //不是中文,则采用en_US
|
locale = Locale.US;
|
}
|
}
|
}
|
return locale;
|
}
|
|
/**
|
* 用于实现Locale的切换。比如SessionLocaleResolver获取Locale的方式是从session中读取,但如果
|
* 用户想要切换其展示的样式(由英文切换为中文),那么这里的setLocale()方法就提供了这样一种可能
|
*
|
* @param request HttpServletRequest
|
* @param httpServletResponse HttpServletResponse
|
* @param locale locale
|
*/
|
@Override
|
public void setLocale(@NonNull HttpServletRequest request, HttpServletResponse httpServletResponse, Locale locale) {
|
|
}
|
}
|