스프링 메시지 소스

스프링은 메시지 관리 기능을 기본적으로 제공한다.

직접 등록

class Example {

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

    • 설정 파일의 이름을 넣는다.

      • messages 라고 넣으면 messages.properties 파일을 읽는다.

      • 국제화를 적용하려면 message_en.properties처럼 파일명 마지막에 언어 정보를 주면 된다.

    • 파일은 /resoures/messages.properties에 둔다.

    • 여러 파일을 한 번에 지정할 수 있다.

      • 예제는 messages, errors 두 개를 지정했다.

  • defaultEncoding

    • 인코딩 정보를 지정한다.

    • 주로 utf-8을 사용한다.

스프링 부트 자동 설정

스프링 부트는 자동으로 MessageSource를 빈으로 등록한다.

  • MessageSource를 빈으로 등록하지 않고 스프링 부트 설정도 하지 않으면 기본 설정이 적용된다.

    • messages_en.proeprties, messages_ko.properties, messages.properties 파일을 만들면 자동으로 인식한다.

메시지 파일 만들기

/resources 아래에 파일을 생성한다.

스프링 메시지 소스 사용

  • code

    • hello

  • args

    • null

  • locale

    • null

    • locale 정보가 없으면 basename에서 설정한 기본 이름의 메시지 파일을 조회한다.

    • basename이 messages이므로 messages.properties에서 데이터를 조회한다.

메시지가 없는 경우

  • 설정에 없는 메시지는 NoSuchMessageException을 던진다.

기본 메시지 지정

  • 메시지가 없어도 defaultMessage를 지정해주면 그 데이터를 반환한다.

매개 변수 사용

  • 메시지 설정 파일에 넣은 {0}을 매개변수로 치환할 수 있다.

국제화 파일 선택

  • locale 정보가 없으면 messages를 사용한다.

  • locale 정보를 지정했지만 message_ko가 없으므로 messages를 사용한다.

  • locale 정보가 ENGLISH이므로 message_en을 찾아 사용한다.

웹 애플리케이션에 메시지 적용

웹 애플리케이션에 국제화 적용

  • 크롬 설정을 영어로 바꾸고 접속하면 적용된다.

    • 설정을 바꾸면 accept-language 헤더가 언어 정보를 담아 요청하고 해당 언어로 화면이 출력된다.

  • 스프링은 기본적으로 Locale 정보를 알아야 언어를 선택할 수 있다.

    • 언어 선택 시 기본으로 accept-language 헤더의 값을 사용한다.

LocaleResolver

스프링의 Locale 선택 방식을 바꾸고 싶다면 LocaleResolver 인터페이스를 사용한다.

  • 스프링 부트는 기본적으로 AcceptHeaderLocaleResolver로 accept-language를 사용한다.

  • 이 설정을 바꾸고 싶다면 LocaleResolver의 구현체를 쿠키나 세션 기반으로 바꾸면 된다.

Last updated

Was this helpful?