목표

  • 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());
}

참고 자료