Sky Archive

Framework/Spring Boot

[Spring Boot] 다국어처리(MessageSource)

서울시장 2022. 3. 28. 20:49

스프링프레임워크 또는 스프링부트에서 활용할 수 있는 다국어처리 또는 공통메세지처리 하는 방법에 대해서 알아보도록 하자.

언어설정에 따라 화면에서 해당 부분에 언어만 변경하거나 자주 사용하는 공통 메세지 경우 따로 관리하기 보단 공통 소스로 관리하는 편이 수정해야되는 상황에서 해당 문구를 일일이 찾아서 수정할 필요없이 관리가 용이하다.

 

스프링에서 기본적으로 제공해주는 MessageSource를 사용하여 메세지처리를 해보도록 한다.

 

Java Config messageSource 설정하기

 

@Configuration
public class MessageConfig {

    @Bean
    public MessageSource messageSource() throws IOException {
    	ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath:/messages/");
        messageSource.setDefaultEncoding("UTF-8");
        // locale에 해당하는 file이 없을 경우 system locale을 사용
        messageSource.setFallbackToSystemLocale(false);
        return messageSource;
    }
    
    @Bean
    public MessageSourceAccessor messageSourceAccessor() throws IOException {
        return new MessageSourceAccessor(messageSource());
    }
}

 

자바 클래스 파일을 설정파일로 사용하여 ReloadableResourceBundleMessageSource 호출을 통해 Message 설정파일을 읽어드린다.

요즘은 xml로 설정하기 보단 Java Config로 설정하는게 추세라고 한다.

xml과 비교해서 클래스를 사용하는 이유는 오타를 발견하기 쉽고 자동완성 등을 지원받을 수 있다.

 

@Configuration : @Bean 메소드를 제공하는 클래스를 명시

 

메세지 프로퍼티 생성하기

 

아래와 같이 메세지 프로퍼티를 생성해주었다.

└src

  └main

    └resources

      └messages

        └messgae_en_US.properties

        └message_ko_KR.properties

 

#message_en_US.properties
common.enter=Enter
#message_ko_KR.properties
common.enter=확인

 

메세지 호출 확인

 

public class MessageTest {

    @Autowire
    private MessageSourceAccessor messageSourceAccessor;
    
    @Test
    public void excuteMessage() throws Exception {
    	System.out.println("en_US : " + messageSourceAccessor.getMessage("enter", Locale.US));
        System.out.println("ko_KR : " + messageSourceAccessor.getMessage("enter", Locale.KOREA));
    }
}

 

#출력결과

en_US : Enter

ko_KR : 확인

 

Locale 설정값에 따라 나라별로 메세지를 호출할 수 있다.