"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>
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 |