반응형

스프링 메시지 소스 사용


MessageSource 인터페이스

MessageSource 인터페이스를 보면 코드를 포함한 일부 파라미터로 메시지를 읽어오는 기능을 제공한다.

스프링이 제공하는 메시지 소스를 어떻게 사용하는지 테스트 코드를 통해서 학습해보자.

 

test/java/hello/itemservice/message.MessageSourceTest.java

  • ms.getMessage("hello", null, null)
    • code: hello
    • args: null
    • locale: null

가장 단순한 테스트는 메시지 코드로 hello를 입력하고 나머지 값은 null을 입력했다.
locale 정보가 없으면 basename에서 설정한 기본 이름 메시지 파일을 조회한다. basename으로 messages를 지정했으므로 messages.properties 파일에서 데이터를 조회한다.

MessageSourceTest추가 - 메시지가 없는 경우, 기본 메시지

  • 메시지가 없는 경우에는 NoSuchMessageException 이 발생한다.
  • 메시지가 없어도 기본 메시지(defaultMessage)를 사용하면 기본 메시지가 반환된다.

 

MessageSourceTest추가 - 매개변수 사용

다음 메시지의 {0} 부분은 매개변수를 전달해서 치환할 수 있다.
hello.name=안녕 {0} Spring 단어를 매개변수로 전달 안녕 Spring


국제화 파일 선택
locale 정보를 기반으로 국제화 파일을 선택한다.

  • Locale이 en_US의 경우 messages_en_US messages_en messages 순서로 찾는다.
  • Locale에 맞추어 구체적인 것이 있으면 구체적인 것을 찾고, 없으면 디폴트를 찾는다고 이해하면 된다.

 

MessageSourceTest 추가 - 국제화 파일 선택1

  • ms.getMessage("hello", null, null):locale 정보가 없으므로 messages를 사용
  • ms.getMessage("hello", null, Locale.KOREA): locale 정보가 있지만, message_ko가 없으므로 messages를 사용

 

MessageSourceTest 추가 - 국제화 파일 선택2

  • ms.getMessage("hello", null, Locale.ENGLISH): locale 정보가 Locale.ENGLISH이므로 messages_en을 찾아서 사용

 

강의 내용 정정 - 영상과 다른 내용 보충

Locale 정보가 없는 경우 Locale.getDefault()을 호출해서 시스템의 기본 로케일을 사용한다.
예)locale = null 인 경우  시스템 기본 locale이 ko_KR이므로 messages_ko.properties 조회 시도
→ 조회 실패 → messages.properties 조회

참고: https://www.inflearn.com/questions/286899, https://www.inflearn.com/questions/489062

반응형