Post

메시지 & 국제화

메시지

다양한 메시지를 한 곳에서 관리하도록 하여 유지보수를 용이하게 하는 기능

Spring 메시지 관리 클래스 = MessageSource (interface)
기본 구현체 = ResourceBundleMessageSource

설정 방법

1
2
3
4
5
6
7
@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource ms = new ResourceBundleMessageSource();
    ms.setBaseNames("messages", "errors");
    ms.setDefaultEncoding("utf-8");
    return ms;
}
  • setBaseNames() 에 사용할 메시지 파일의 이름을 넘겨주고, setDefaultEncoding() 에 인코딩 정보를 넘겨준다.
  • 메시지 파일은 /resources 디렉토리 하위에 둔다.
  • 국제화를 적용하려면 메시지 파일을 복제하여 이름 뒤에 _en 과 같이 언어정보를 적어주기만 하면 된다.
  • 스프링부트를 사용하면 MessageSource 를 자동으로 빈으로 등록해줘서 messages 라는 이름의 메시지 파일만 생성하면 별도의 설정없이 바로 사용할 수 있다.
  • messages 파일 외에 추가로 메시지 파일을 적용하려면 application.properties 파일에 아래와 같이 작성하면 된다.

    1
    
      spring.messages.basename=messages,config.i18n.messages
    

    config.i18n.messages/resources/config/i18n/messages.properties 를 의미한다.

타임리프에 메시지 적용 방법 : #{…}

1
2
3
4
5
<h2 th:text="#{page.addItem}">상품 등록</h2>
<!-- 등록한 메시지 파일 중 page.addItem 에 설정된 값을 읽어 적용한다. -->

<h2 th:text="#{hello.name(${item.itemName})">상품명</h2>
<!-- argument 가 존재하는 메시지 사용 -->

Spring은 기본적으로 요청 헤더의 Accept-Language 헤더의 값을 기준으로 Locale 을 적용하는 AcceptHeaderLocaleResolver 클래스를 사용한다. 만약 Locale 선택 방식을 변경하고 싶다면 LocaleResolver 인터페이스를 implements 하면 된다.

This post is licensed under CC BY 4.0 by the author.