타임리프 메시지 및 국제화

Updated:     Updated:

Categories:

Tags: , ,

스프링 메시지 소스

여러 화면에 보이는 많은 정보들을 한번에 바꾸기 위해서는 메시지 처리가 되어있어야 한다.

  • 직접 구현하기 메시지와 국제화 기능을 직접 구현하기 위해서는 HTTP 요청 헤더에 있는 accept-language값을 받아와 사용자에 맞는 언어를 내어주거나 사용자가 직접 언어를 선택하고 쿠키에 담아 요청과 응답을 하는 코드를 구현하면 된다.

  • 스프링 빈으로 등록하기 스프링은 메시지 관리를 위해 MessageSource 인터페이스를 스프링 빈으로 등록하면 된다. 설정파일이 담길 위치와 어떤 방식으로 인코딩할지를 정하여 빈에 등록하면 된다.
    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasenames("messages", "errors");
        messageSource.setDefaultEncoding("utf-8");
        return messageSource;
    }
    
  • 스프링 부트 스프링 부트를 사용하면 알아서 MessageSource를 자동으로 빈에 등록해준다. application.properties에서 메시지 관련 설정들을 손쉽게 변경할 수 있다.
    spring.messages.basename=messages
    

메시지 찾기

  • getMessage()
    • code: message.properties에서 찾을 message에 해당하는 코드
      - args : object 배열에 message에서 사용할 배열 원소
      - defaultMessage: 값이 없을시 기본 메시지
      -locale: 선택할 지역


타임리프 메시지 적용 및 국제화

#{…} 을 사용하면 스프링의 메시지를 편리하게 조회할 수 있다.

<div th:text="#{label.item}"></h2>

스프링은 HTTP 요청시 Accept-Language헤더값을 바탕으로 국제화 언어를 선택한다. 만약 사용자가 언어를 직접 선택하고 싶다면 스프링에서 제공하는 LocaleResolver 인터페이스를 구현한 구현체를 만들어서 사용할 수도 있다.

public interface LocaleResolver {
    Locale resolveLocale(HttpServletRequest request);
    void setLocale(HttpServletRequest request, @Nullable HttpServletResponse
  response, @Nullable Locale locale);
}

spring 카테고리 내 다른 글 보러가기

Leave a comment