Whiteship's Note

MessageSource 사용 예

Spring/Chapter 3 : 2007.03.15 21:47


ApplicationContext가 MessageSource 인터페이스를 구현했기 때문에 ApplicationContext를 MessageSource 처럼 사용할 수 있습니다.

greeting에 관한 메시지를 받아 오는 예제를 작성해 보겠습니다.

    @Test public void messageSource(){
        MessageSource messageSouce = bf;
        assertTrue(messageSouce.getMessage("greeting", null, "Default", null).
                equals("It's good to see you"));
    }

테스트는 실패 합니다. 이 테스트를 통과 시키기 위해서는 properties 파일[각주:1]과 간단한 xml 설정이 필요합니다.

먼저 format.properties 파일을 만듭니다.
greeting=It's good to see you

xml에는 다음 과 같이 format.properties 파일을 읽을 수 있도록 설정합니다.
    <bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
              <list>
                <value>format</value>
              </list>
        </property>
      </bean>

그럼 이제 테스트가 통과 하는 걸 확인 할 수 있습니다. bean의 이름은 항상 messageSource여야 합니다.

이번에는 똑같이 greeting에 관한 메시지를 받아 오지만 Locale을 이용해서 Locale.KOREA와 Locale.ENGLISH를 사용하여 i18n을 해봅니다.

테스트 코드를 다음과 같이 수정합니다.
    @Test public void messageSource(){
        MessageSource messageSouce = bf;
        assertEquals(messageSouce.getMessage("greeting", null, "Default", Locale.ENGLISH)
                ,"It's good to see you");
        assertEquals(messageSouce.getMessage("greeting", null, "Default", Locale.KOREA)
                ,"hi");
    }

properties 파일 이름을 변경하고 하나를 추가합니다.
#format_en.properties
greeting=It's good to see you
#format_ko_KR.properties
greeting=hi

xml 파일은 그대로 두고 테스트를 실행합니다. 테스트는 녹색불이 켜집니다.

format 뒤에 접미어는 Locale 클래스의 상수를 보고 거기에 따라 붙여 줘야 합니다. 그래야 ResouceBundle이 Locale에 따라 적당한 properties파일로 부터 message를 읽어옵니다.

Properties 참조 : http://blog.naver.com/swucs?Redirect=Log&logNo=40007033984
  1. 하나의 번들이라고도 할 수 있겠습니다. [본문으로]
top

Write a comment.