Last active
March 18, 2017 12:36
-
-
Save arahansa/64fc733ca4f208b4435edd3365659678 to your computer and use it in GitHub Desktop.
처음에는 AcceptHeaderLocaleResolver 로 한번 쿠키 설정된 이후로는 CookieLocaleResolver 로 동작하는 스프링 리졸버
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CustomLocaleResolver extends CookieLocaleResolver { | |
public void setSupportedLocales(List<Locale> locales) { | |
this.supportedLocales.clear(); | |
if (locales != null) { | |
this.supportedLocales.addAll(locales); | |
} | |
} | |
@Override | |
public Locale resolveLocale(HttpServletRequest request) { | |
Cookie cookie = WebUtils.getCookie(request, getCookieName()); | |
if (cookie == null) { | |
Locale locale = request.getLocale(); | |
log.trace("request Locale : {}", locale); | |
if (!isSupportedLocale(locale)){ | |
log.trace("not support single locale"); | |
Locale supportedLocale = findSupportedLocale(request); | |
if(supportedLocale==null){ | |
log.trace("not found any support lang"); | |
return super.resolveLocale(request); | |
}else{ | |
log.trace("found support lang from locales : {}", locale); | |
request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale); | |
} | |
}else{ | |
log.trace("support single locale : {} , {} ", locale ,LOCALE_REQUEST_ATTRIBUTE_NAME); | |
request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, locale); | |
} | |
} | |
return super.resolveLocale(request); | |
} | |
private final List<Locale> supportedLocales = new ArrayList<Locale>(4); | |
private boolean isSupportedLocale(Locale locale) { | |
List<Locale> supportedLocales = getSupportedLocales(); | |
return (supportedLocales.isEmpty() || supportedLocales.contains(locale)); | |
} | |
public List<Locale> getSupportedLocales() { | |
return this.supportedLocales; | |
} | |
// 원래 스프링 코드와는 달리 지원안할 때는 null 로 처리 | |
private Locale findSupportedLocale(HttpServletRequest request) { | |
Enumeration<Locale> requestLocales = request.getLocales(); | |
while (requestLocales.hasMoreElements()) { | |
Locale locale = requestLocales.nextElement(); | |
if (getSupportedLocales().contains(locale)) { | |
return locale; | |
} | |
} | |
return null; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Bean | |
public CookieLocaleResolver localeResolver() { | |
CustomLocaleResolver resolver = new CustomLocaleResolver(); | |
resolver.setCookieName("testLocaleCookie"); | |
// foo ba... | |
resolver.setSupportedLocales(Arrays.asList(Locale.KOREA, Locale.ENGLISH)); | |
return resolver; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment