Spring- 메시지, 국제화

희운·2025년 5월 19일

SpringBoot

목록 보기
5/10

메시지

메세지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource 를 스프링 빈으로 등록하여야 한다.


 @Bean
 public MessageSource messageSource() {
     ResourceBundleMessageSource messageSource = new
ResourceBundleMessageSource();
    messageSource.setBasenames("messages", "errors");
    messageSource.setDefaultEncoding("utf-8");
    return messageSource;
}

basenames : 설정 파일의 이름을 지정한다.

  • messages 로 지정하면 messages.properties 파일을 읽어서 사용한다.
  • 파일의 위치는 /resources/messages.properties 에 두면된다.

하지만 스프링 부트를 사용하면 MessageSource 는 자동으로 스프링 빈으로 등록이 되기 때문에 수동으로 빈 등록을 할 필요가 없다.

스프링 부트 메시지 소스 설정
스프링 부트를 사용하면 다음과 같이 메시지 소스를 설정할 수 있다.
application.properties spring.messages.basename=messages,config.i18n.messages
스프링 부트 메시지 소스 기본 값** spring.messages.basename=messages
MessageSource 를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages 라 는 이름으로 기본 등록된다.
따라서 messages_en.properties , messages_ko.properties , messages.properties 파일만 등록하면 자동으로 인식된다.

MessageSource 인터페이스

public interface MessageSource {
     String getMessage(String code, @Nullable Object[] args, @Nullable String
 defaultMessage, Locale locale);
     String getMessage(String code, @Nullable Object[] args, Locale locale)
throws NoSuchMessageException;

MessageSource 인터페이스를 보면 일부 파라미터로 메시지를 가져오는 기능을 제공한다.

국제화

먼저 message_en.properties 와 같이 메시지를 추가해 주자.


messages_en.properties

 label.item=Item
 label.item.id=Item ID
 label.item.itemName=Item Name
 label.item.price=price
 label.item.quantity=quantity
 page.items=Item List
 page.item=Item Detail
 page.addItem=Item Add
 page.updateItem=Item Update
 button.save=Save
button.cancel=Cancel

위의 MessageSource 인터페이스에서 보다시피 Locale 정보를 알아야 언어 선택을 할 수 있다.

결국 스프링도 Locale 정보를 알아야 언어를 선택할 수 있는데, 스프링은 언어 선택시 기본으로 Accept-Language 헤더의 값을 사용한다.

profile
기록하는 공간

0개의 댓글