메시지, 국제화
업데이트:
메시지
화면에서 보이는 문구 및 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 말한다.
사용방법
- messages.properteis라는 메시지 관리용 파일을 만들고 각 HTML들은 해당 데이터를 key 값으로 불러서 사용한다.
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
<label for="itemName" th:text="#{item.itemName}"></label>
국제화
- 메시지에서 사용하는 파일을 각 나라별로 별도로 관리하는 서비스를 국제화 할 수 있다.
- 영어를 사용하면 _en, 한국어를 사용하면 ko를 사용하게 개발하면 된다.
- 한국어를 접근할지 영어를 접근할지 인식 방법은 HTTP accept-language 헤더 값을 사용하거나 직접 언어를 선택하도록하고, 쿠기등을 사용해서 처리한다.
messages_en.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
messages_ko.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
스프링 메시지 소스 설정
- 스프링은 기본적인 메시지 관리 기능을 제공한다.
- 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하여 사용한다.
- MessageSource는 인터페이스로 구현체인 ResourceBundleMessageSource를 빈으로 등록한다.
직접 등록
- messages로 지정하면 messages.properties 파일을 읽어서 사용한다.
- 국제화 기능을 적용하려면 _ko 같은 언어정보를 주면 되고 없는경우 messages.properties 기본으로 사용한다.
- 파일위치는 /resources/messages.properties
- 여러 파일을 한번에 지정할 수 있고 아래는 messages, errors 둘을 지정했다.
@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를 등록하는데 기본적으로 등록이 되어 있다.
웹 애플리케이션에 국제화 적용
스프링의 국제화 메시지 선택
- 메시지 기느은 Locale 정보를 알아야 언어를 선택할 수 있다.
- 스프링도 Local 정보를 알아야 하는데 언어 선택시 기본으로 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);
}
댓글남기기