티스토리 뷰

지난번에는 Spring의 기본 LocaleResolver인 AcceptHeaderLocaleResolver 사용법에 대해서 살펴봤다. 이건 메세지만 다국어로 분기를 했을 뿐 아무것도 처리하지 않은 환경에서 사용하기 적합하고 이번에 다룰 SessionLocaleResolver 는 실제로 많이 사용되는 LocaleResolver이다. 말 그대로 Session에 Locale 정보를 박아 넣고 이를 통해 다국어를 처리해주는 역할을 한다고 보면 된다. 어떻게 사용하는지 살펴보도록 하자. (단 사전에 Locale 별로 messageSource를 가지고 있는 환경은 구성해 놓도록 하자. )


LocaleResolver 설정

Config 파일에서 LocaleResolver에 대한 설정을 넣는다. 

@Bean 
public SessionLocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale(new Locale("ko"));
    return sessionLocaleResolver;
}

기본 언어는 ko로 설정을 했다. LocaleResolver는 locale을 결정하는 역할을 한다고 보면 된다. 

 

Controller 설정

@RequestMapping(value = "/changeLocale")
public void changeLocale(String language, HttpSession session) {
    //language는 en 이런식으로 값을 넣어주면 된다.
    session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale(language));
}

session에 화면으로부터 넘어온 language라는 param 값으로 locale을 set 해준다. 

 

js 구현

function changeLocale(value){  
  $.ajax({
    url: "${contextPath}/changeLocale",
    type: "POST",
    dataType: "json",
    data: {'language' : value},
    ...

 

이런 식으로 화면에서는 language 라는 값을 넣어서 넘겨주도록 한다. 보통은 selectbox로 구현을 많이 한다. 

언어 선택

이런식으로 설정을 해놓고 위의 js의 changeLocale 메소드가 실행되게 하면 session의 locale이 변경이 된다. 변경된 locale 정보에 맞게 message_en.properties를 읽을지, message_ko.properties를 읽을지 판단을 하여 보여주게 된다. 


위와 같이 직접 SessionLocaleResolver를 직접 set 하여 locale의 정보를 변경하는 방법이 있고 LocaleChangeInterceptor를 활용하여 변경을 하는 방법도 있다. (더 쉬움)

LocaleChangeInterceptor 설정

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    ...
    
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        return localeChangeInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

LocaleResolver bean 설정은 되어 있어야 한다. LocaleChangeInterceptor는 url 뒤에 특정 locale 인자값을 넘겨서 변경하도록 하는 것이다. 간단하게 구현이 가능해 많이 사용된다. 위의 소스로 예를 들자면 ip:port/abc/dev?lang=en 이런식으로 요청이 들어온다면 locale을 en으로 변경을 해준다. 위에 설정한 lang이라는 값은 내게 맞게 변경하여 사용할 수 있다. 

 

끝!

 

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31