package com.zy.common.i18n; import com.core.common.Cools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; @Component public class RequestLocaleInterceptor extends HandlerInterceptorAdapter { public static final String LANG_COOKIE_NAME = "wcs_lang"; @Autowired private I18nMessageService i18nMessageService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { Locale locale = i18nMessageService.resolveLocale(extractLocale(request)); org.springframework.context.i18n.LocaleContextHolder.setLocale(locale); request.setAttribute("wcsLocale", locale); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { org.springframework.context.i18n.LocaleContextHolder.resetLocaleContext(); } private String extractLocale(HttpServletRequest request) { String locale = request.getParameter("lang"); if (!Cools.isEmpty(locale)) { return locale; } locale = request.getHeader("X-Lang"); if (!Cools.isEmpty(locale)) { return locale; } Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (LANG_COOKIE_NAME.equals(cookie.getName()) && !Cools.isEmpty(cookie.getValue())) { return cookie.getValue(); } } } return request.getHeader("Accept-Language"); } }