메시지, 국제화

업데이트:

메시지

화면에서 보이는 문구 및 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 말한다.

사용방법

  • 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);
}

댓글남기기