menu

MessageSource

MessageSource

스프링에서는 MessageSource 라는 기능을 통해서 다국어화 처리를 지원한다.
(MessageSource는 applicationContext가 상속받았기 때문에 프로젝트 내부라면 어디든 사용 가능하다.) MessageSource는 request의 Locale(country)에 따라서 각각 다르게 응답 할수 있다.
물론 사용하기 위해선 빈 등록을 해주어야 한다.
(스프링부트는 세팅이 되어 있어서 따로 빈 등록을 안해도 message.propertis를 다 읽기 때문에 바로 사용 할 수 있다.)
프로젝트에 properties파일도 만들어주어야 하는데 아래에 같은 형식을 propertis을 만들어야 한다.


propertis 파일 만들기

default 예시

  • message.propertis

한국 예시

  • message_ko.propertis

영어 예시

  • message_en.propertis

message.propertis 작성

greeting = hello {0}

여기서 hello는 상수이며 숫자는 호출할때 주입한 아규먼트의 인덱스라고 보면된다.


빈 등록

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <!-- Bean id랑 실제 클래스 경로(이름)	-->
<property name="basenames">
		<value>'message.propertis path'</value>
        <!-- message.propertis의 경로를 지정한다 -->
</property>
    <property name="defaultEncoding" value="utf-8"/>
    <!-- 한글깨짐 방지를 위해 utf-8을 기본으로 인코딩한다 -->
</bean>

스프링 부트는 위와같이 세팅 안해도 사용 가능하다


메시지 사용

@Component
public class MessageTest() {
    
    @Autowired
    MessageSource messageSource;

    public String getGreting() {
        System.out.println(messageSource.getMessage('greeting', new String['Mr.Son'], {locale,KOREA}));
        // messageSource에 getMessage 메소드를 사용한다 
        // 가져올 메시지는 키값은 greeting이고
        // 넘기는 파라미터로는 Mr.Son이고 
        // locale은 KOREA이다 (message_ko.properties에서 greeting을 찾는다.)
    }

}

결과

Hello Mr.Son

참고 블로그

http://javaslave.tistory.com/69
https://github.com/kenu/springstudy2013/blob/master/0325/1.SpringMessageSource.md