Skip to content

Instantly share code, notes, and snippets.

@arahansa
Last active March 18, 2017 12:36
Show Gist options
  • Save arahansa/64fc733ca4f208b4435edd3365659678 to your computer and use it in GitHub Desktop.
Save arahansa/64fc733ca4f208b4435edd3365659678 to your computer and use it in GitHub Desktop.
처음에는 AcceptHeaderLocaleResolver 로 한번 쿠키 설정된 이후로는 CookieLocaleResolver 로 동작하는 스프링 리졸버
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;
}
}
@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