- locale이 무엇인지 이해한다.
- Spring에서 locale을 어떻게 처리하는지 이해한다.
Locale#
- 지리적, 문화적, 정치적 지역을 나타내는 역할을 가지는 클래스
- 언어, 국가 등을 표현한다.
Spring에서 Locale 처리 방법#
- Spring 애플리케이션에서 요청자의 지역에 따라 다른 언어를 표시하기 위해서는 현재 Locale을 결정하는 방법이 있어야 된다.
DispatcherServlet은 locale resolver를 찾고, 찾은 locale resolver를 통해서 locale을 지정하려고 시도한다.RequestContext.getLocale() 메서드 호출을 통해 locale resolver가 설정한 locale을 확인해 볼 수 있다.
LocaleResolver#
LocaleResolver: locale을 선택하기 위한 전략을 나타내는 전략 인터페이스- 대표적인 기본 구현체
AcceptHeaderLocaleResolver: HTTP 요청의 Accept-Language 헤더를 통해 locale을 선택한다. 해당 locale resolver는 locale을 직접 수정할 수는 없다.CookieLocaleResolver: 클라이언트에 있는 쿠키 값을 확인해서 locale을 확인할 수 있다. 이 때, 사용할 cookie 이름은 자유롭게 수정할 수 있다.SessionLocaleResolver: HttpSession 의 attribute를 통해서 locale을 확인한다.
- Spring boot는 기본적으로
AccepHeaderLocaleResolver를 사용하고 다른 구현체를 사용하려면 bean으로 등록하면 된다.
LocaleChangeInterceptor#
LocaleChangeInterceptor를 통해 request paramter에 따라 Locale 설정이 가능하도록 구성할 수 있다.- 아래와 같이 bean으로 등록하고
WebMvcConfigurer 인터페이스인 config 클래스에 등록하면, lang request parameter에 지정된 값에 따라 자동으로 locale이 변경된다.
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
참고 자료#