해결된 질문
작성
·
1.5K
1
답변 1
1
안녕하세요, 이도원입니다.
문의하신 작업은 AcceptHeaderLocaleResolver 클래스를 이용하시면 처리할 수 있습니다. 다음과 같은 LocaleResolver를 구현하신 다음,
public class AcceptHeaderResolver extends AcceptHeaderLocaleResolver {
List<Locale> LOCALES = Arrays.asList(new Locale("en"), new Locale("ar"));
@Override
public Locale resolveLocale(HttpServletRequest request) {
String headerLang = request.getHeader("Accept-Language");
return headerLang == null || headerLang.isEmpty()
? Locale.getDefault()
: Locale.lookup(Locale.LanguageRange.parse(headerLang), LOCALES);
}
}
컨트롤러에서는 @RequestHeader를 이용하여 Locale을 사용하지 마시고, 다음과 같이 HttpServletRequest를 이용하여 "Accept-Language" 값을 얻은 다음에, 정상적으로 처리되게 하실 수 있습니다.
@GetMapping(path = "/test-world-internationalized")
public String testWorldInternationalizedWithoutHeader(HttpServletRequest request) {
String acceptLanguage = request.getHeader("Accept-Language");
System.out.println(acceptLanguage);
Locale locale = resolver.resolveLocale(request);
return messageSource.getMessage("greeting.message", null, locale);
}
위와 같이 구현하시면, 크롬에서 요청 시 다음과 같이 Accept-Language가 전달된다 하더라도,
ko,en-US;q=0.9,en;q=0.8
AcceptHeaderResolver 클래스의 resolveLocale 메소드에서 해당 값을 Parsing하여 사용할 수 있습니다.
감사합니다.
감사합니다