스프링 메시지 소스 설정

현시기얌·2022년 3월 17일
0

Spring MVC

목록 보기
18/22

스프링 메시지 소스 설정

  • 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 되는데 MessageSource는 인터페이스다.
  • 따라서 구현체는 ResourceBundleMessageSource를 스프링 빈으로 등록하면 된다.

직접 등록

    @Bean
    public MessageSource messageSource() {
        final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasenames("messages", "errors");
        messageSource.setDefaultEncoding("utf-8");
        return messageSource;
    }
  • basenames: 설정 파일의 이름을 지정한다.
    • messages로 지정하면 messages.properties 파일을 읽어서 사용한다.
    • 추가로 국제화 기능을 적용하려면 messages_en.properties, messages_ko.properties와 같이 파일명 마지막에 언어 정보를 주면 된다.
    • 만약 국제화 파일이 없으면 messages.properties(언어정보가 없는 파일명)를 기본으로 사용한다.
    • 파일의 위치는 /resources/messages.properties에 두면 된다.
    • 여러 파일을 한번에 지정할 수 있다.
    • 위의 코드에서는 messages, errors 둘을 지정했다.
  • defaultEncoding: 인코딩 정보를 지정한다.

스프링 부트

  • 스프링 부트를 사용하면 스프링 부트가 MessageSource를 자동으로 스프링 빈으로 등록한다.

스프링 부트 메시지 소스 설정

  • 스프링 부트를 사용하면 다음과 같이 메시지 소스를 설정할 수 있다.

application.properties

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

스프링 부트 메시지 소스 기본 값

spring.messages.basename=messages
  • MessageSource를 스프링 빈으로 등록하지 않고 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages 라는 이름으로 기본 등록 된다.
  • 따라서 messages_en.properties, messages_ko.properties, messages.properties 파일만 등록하면 자동으로 인식된다.

스프링의 국제화 메시지 선택

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

LocaleResolver

  • 스프링은 Locale 선택 방식을 변경할 수 있도록 LocaleResolver라는 인터페이스를 제공하는데 스프링 부트는 기본으로 Accept-Language를 활용하는 AcceptHeaderLocaleResolver를 사용한다.
public interface LocaleResolver {
	Locale resolveLocale(HttpServletRequest request);
    
    void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale);
}

LocaleResolver 변경

  • 만약 Locale 선택 방식을 변경하려면 LocaleResolver의 구현체를 변경해서 쿠키나 세션 기반의 Locale 선택 기능을 사용할 수 있다.
profile
현시깁니다

0개의 댓글