타임리프 메시지 및 국제화
Categories: spring
스프링 메시지 소스
여러 화면에 보이는 많은 정보들을 한번에 바꾸기 위해서는 메시지 처리가 되어있어야 한다.
-
직접 구현하기 메시지와 국제화 기능을 직접 구현하기 위해서는 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: 선택할 지역
- code: message.properties에서 찾을 message에 해당하는 코드
타임리프 메시지 적용 및 국제화
#{…} 을 사용하면 스프링의 메시지를 편리하게 조회할 수 있다.
<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);
}
Leave a comment