Spring/MVC

학습 // Spring // MVC // Locale

문스코딩 2018. 8. 21. 19:28
업데이트 :: 2018.08.21



Locale 결정

  • org.springframework.web.servlet.LocaleResolver 인터페이스
    • 스프링 MVC는 Locale정보를 어디서 가져오느냐에 따라 다른 구현 클래스르 가짐

구현클래스

  • AcceptHeaderLocaleResolver
    • HTTP 요청의 Accept-Language 헤더에 설정된 Locale 정보를 활용
    • Locale을 변경하고 싶다면 사용자가 브라우저의 언어 설정을 바꾸 수 있음
  • SessionLocaleResolver
    • HTTP 세션에 저장된 Locale 정보를 활용
    • Locale 변경은 LocaleChangeInterceptor에서 처리
  • CookieLocaleResolver
    • 쿠키에 저장된 Locale정보를 활용
    • Locale 변경은 LocaleChangeInterceptor에서 처리
  • FixedLocaleResolver
    • JVM이나 OS의 Locale 정보나 애플리케이션에서 설정한 Locale 정보를 활용
    • 애플리케이션에서 Locale을 고정해서 사용하고 싶을 때

Locale 활용

  • MessageSource 인터페이스
    • 화면에 표시되는 라벨이나 메시지의 표시할 문자열을 가져옴
    • JSP를 뷰로 사용하는 경우에 <spring:message> 같은 태그 라이브러리로 문자열을 표시
    • 이 때 사용할 Locale은 LocaleResolver가 결정

JSP 구현의 예

<spring:message code="title.home" />

핸들러 메서드에서 Locale에 의존하는 처리가 필요할때

@RequestMapping(path="make", params="scope=daily")
public String makeDailyResort(Locale locale) {
  // Locale에 의존하는 처리
  return "report/complete";
}
  • 핸들러 매서드 이외의 곳에서 Locale에 의존하는 처리가 필요할 시
    • org.springframework.web.servlet.support.RequestContextUtils의 getLocale(HttpServletRequest) 사용

UI를 이용한 Locale 전환

  • org.springframework.web.servlet.i18n.LocaleChangeInterceptor

@Bean
public LocaleResolver localeResolver() {
  CookieLocaleResolver resolver = new CookieLocaleResolver();
  resolver.setCookieName("locale");
  resolver.setDefaultLocale(Locale.KOREA);
  return resolver;
}
  • CookieLocaleResolver를 localeResolver라는 이름의 빈으로 정의
  • setCookieName()
    • cookieNmae 프로퍼티에 Locale을 저장하기 위해 쿠키명 설정
    • 따로 설정하지 않으면 스프링을 사용하는 것을 유추할 수 있는 이름이 나오기 떄문에 설정하는 것을 권장
  • setDefaultLocale()
    • 기본 Locale을 지정

LocaleChangeInterceptor 빈정의

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
  @Override
   public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(new LocaleChangeInterceptor())
        .includePathPatterns("/**")
        .excludePathPatterns("/resource/**")
        .excludePathPatterns("/**/.html");
   }
}
  • addInterceptors() 재정의
  • LocaleChangeInterceptor를 스프링 MVC가 인식하도록 설정
  • 이때, Locale을 지정하기 위한 요청 파라미터 이름으 기본값은 "locale"

Locale 전환용 화면요소

<a href="?locale=en">English</a>
<a href="?locale=ko">Korean</a>
  • 요청 파라미터로 Locale을 설정하기 위해 요청 파라미터 ("locale")을 지정

Created by MoonsCoding

e-mail :: jm921106@gmail.com

반응형

'Spring > MVC' 카테고리의 다른 글

학습 // Spring // MVC // Test  (2) 2018.08.22
학습 // Spring // MVC // 정적리소스  (0) 2018.08.21
학습 // Spring // MVC // 공통처리  (0) 2018.08.21
학습 // Spring // MVC // Async  (0) 2018.08.21
학습 // Spring // MVC // FileUpload  (0) 2018.08.21