ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring-4]국제화 서비스를 위한 MessageSource 설정하기
    설치&설정 관련/Spring Framework 2014. 10. 24. 00:28
    728x90

    본 포스팅은 UTF-8 Filter 적용 및 ViewResolver 설정 이후, 국제화 서비스 제공을 위한 MessageSource 설정 하는 내용입니다.

    GIT 주소 : https://github.com/lahuman/SpringBoot.Sample


    국제화(Internationalization)란?


    사용자의 Locale에 따라 표출되는 언어를 변경하는 서비스 이며, Spring에서는 해당 서비스를 지원하기 위해 MessageSource라는 것을 사용한다.



    준비 사항

    • JDK 1.6 이상
    • Gradle 1.11 이상
    • IntelliJ



    국제화 서비스를 위한 MessageSource 설정하기


    1. Messages.properties 파일 생성하기

    resources 폴더 밑에 messages.properties 파일을 생성한다.

    파일은 다음과 같은 포멧으로 설정 한다. messages_언어_나라.properties


    [파일 목록]



    [Resource Bundle로 확인시]


    TIP : Properties 파일에서 한글 사용시, 깨질시 Settings에서 아래와 같이 UTF-8 와 체크박스를 선택한다.

    Eclipse 에서는 플러그인 설치가 필요 하지만 Intellij에서는 기본적으로 제공한다.




    2. Application 에 MessagesSource 설정하기

    WebMvcConfigurerAdapter 상속받은 Application 에서 MessageSource 설정을 진행한다.



       @Bean
        public MessageSource messageSource() {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            //WEB-INF 밑에 해당 폴더에서 properties를 찾는다.
            messageSource.setBasename("messages/messages");
            messageSource.setDefaultEncoding("UTF-8");
            return messageSource;
        }
    
        @Bean
        public LocaleChangeInterceptor localeChangeInterceptor(){
            LocaleChangeInterceptor localeChangeInterceptor=new LocaleChangeInterceptor();
            //request로 넘어오는 language parameter를 받아서 locale로 설정 한다.
            localeChangeInterceptor.setParamName("language");
            return localeChangeInterceptor;
        }
    
        @Bean(name = "localeResolver")
        public LocaleResolver sessionLocaleResolver(){
            //세션 기준으로 로케일을 설정 한다.
            SessionLocaleResolver localeResolver=new SessionLocaleResolver();
            //쿠키 기준(세션이 끊겨도 브라우져에 설정된 쿠키 기준으로)
    //        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
    
            //최초 기본 로케일을 강제로 설정이 가능 하다.
            localeResolver.setDefaultLocale(new Locale("en_US"));
            return localeResolver;
        }
    
        public void addInterceptors(InterceptorRegistry registry) {
            //Interceptor를 추가 한다.
            registry.addInterceptor(localeChangeInterceptor());
        }
    


    3. JAVA 또는 JSP에서 사용하기

    Java에서 MessageSource를 사용하기 위해서는 다음과 같이 MessageSource 를 DI(Dependency Injection) 하여 사용한다.


        @Autowired
        private MessageSource messageSource;
    

    그리고 MessageSource에서 제공되는 다음의 method를 주로 사용한다.



    MessageSource Method 인자 설명


    code : properties에서 설정한 Key 값

    args : Key에 해당하는 Value값에 {0}, {1} 등으로 매핑되는 값

    defaultMessage : Key값을 찾지 못할 경우 표출될 값

    locale : 지역 코드 값


    JAVA 사용 예) 


            String usMessage = messageSource.getMessage("hello.test", null, "no surch", Locale.US); //미국 기준 메시지 요청
            String korMessage = messageSource.getMessage("hello.test",null, "no surch", Locale.KOREA);//한국 기준 메시지 요청
            String localeMessage = messageSource.getMessage("hello.test",null, "no surch", localeResolver.resolveLocale(request)); //현재 설정된 위치 기준의 메시지 요청
            //결과 출력
            log.debug("KR: " + korMessage);
            log.debug("US: " + usMessage);
            log.debug("USER SET: " + localeMessage);
            log.debug("response SET: " + response.getLocale().toString()); //respons에 설정된 위치 정보 출력(불변)
    

    JSP 사용 예)



    - Spring taglib를 사용하여 MessageSource 를 쉽게 사용할 수 있다

    - Parameter에 language=Locale 을 하게 되면, 위치 정보 properties가 Locale에 맞게 출력된다.


    4. 테스트 결과


    최초 접속 시)



    한글 선택 시)



    영어 선택 시)




    참고 URL : 

    https://gist.github.com/marcaurele/3665696

    http://alex-ilies.blogspot.kr/2013/12/internationalization-spring-mvc-with.html

    728x90
Designed by Tistory.