본문 바로가기
Spring/MVC 2편

메시지, 국제화

by JHyun0302 2023. 8. 6.
728x90

"messages.properties" 라는 메시지 관리용 파일을 만들고

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다.

addForm.html

  • <label for="itemName" th:text="#{item.itemName}"></label>

editForm.html

  • <label for="itemName" th:text="#{item.itemName}"></label>
 
 
messages_en.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity

 

 

 

 

 


 스프링 메시지 소스 설정

 

메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource 를 스프링 빈으로 등록하면 되는데, MessageSource 는 인터페이스이다. 따라서 구현체인 ResourceBundleMessageSource 를 스프링 빈으로 등록하면 된다.

 

 

스프링 부트를 사용하면 스프링 부트가 MessageSource 를 자동으로 스프링 빈으로 등록한다.

 

스프링 부트를 사용하면 다음과 같이 메시지 소스를 설정할 수 있다.

 

application.properties

  spring.messages.basename=messages,config.i18n.messages

 

※ Default: spring.messages.basename=messages

 

즉, MessageSource 를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages 라는 이름으로 기본 등록된다. 따라서 messages_en.properties , messages_ko.properties , messages.properties 파일만 등록하면 자동으로 인식됨.

 

 

 

 

 


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

 

 messages.properties

label.item=상품
label.item.id=상품 ID 
label.item.itemName=상품명

label.item.price=가격 
label.item.quantity=수량

page.items=상품 목록 
page.item=상품 상세
page.addItem=상품 등록 
page.updateItem=상품 수정

button.save=저장 
button.cancel=취소

 

 

 

렌더링 전

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

 

렌더링 후

<div>상품</h2>

 

 

//페이지 이름에 적용

<h2>상품 등록 폼</h2>
    <h2 th:text="#{page.addItem}">상품 등록</h2>

//레이블에 적용
<label for="itemName">상품명</label>
    <label for="itemName" th:text="#{label.item.itemName}">상품명</label> 
    <label for="price" th:text="#{label.item.price}">가격</label>
    <label for="quantity" th:text="#{label.item.quantity}">수량</label>

//버튼에 적용
<button type="submit">상품 등록</button>
    <button type="submit" th:text="#{button.save}">저장</button> 
    <button type="button" th:text="#{button.cancel}">취소</button>

 

 

웹으로 확인하기

웹 브라우저의 언어 설정 값을 변경하면서 국제화 적용을 확인해보자.
크롬 브라우저 → 설정  언어를 검색하고, 우선 순위를 변경하면 된다.
우선순위를 영어로 변경하고 테스트해보자.
웹 브라우저의 언어 설정 값을 변경하면 요청시 Accept-Language 의 값이 변경된다.

 

 

 

스프링의 국제화 메시지 선택

메시지 기능은 Locale 정보를 알아야 언어를 선택할 수 있다. 결국 스프링도 Locale 정보를 알아야 언어를 선택할 수 있는데, 스프링은 언어 선택시 기본으로 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);
}

 

 

◎참고 : LocaleResolver 변경

  • 만약 Locale 선택 방식을 변경하려면 LocaleResolver 의 구현체를 변경해서 쿠키나 세션 기반의 Locale 선택 기능을 사용 가능.
  • 예를 들어서 고객이 직접 Locale 을 선택하도록 하는 것

 

반응형

'Spring > MVC 2편' 카테고리의 다른 글

로그인 처리1 - 쿠키, 세션  (0) 2023.08.07
검증2 - Bean Validation  (0) 2023.08.07
검증1 - Validation  (0) 2023.08.06
타임리프 - 스프링 통합과 폼  (0) 2023.08.06
타임리프 - 기본 기능  (0) 2023.08.05