728x90
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=취소
타임리프 메시지 적용
타임리프의 메시지 표현식 #{...} 를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다.
예를 들어서 방금 등록한 상품이라는 이름을 조회하려면 #{label.item} 이라고 하면 된다.
렌더링 전
<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>
파라미터는 다음과 같이 사용할 수 있다.
hello.name=안녕 {0}
<p th:text="#{hello.name(${item.itemName})}"></p>
국제화 적용은 간단하다. 일단 영문 properties에 영문 메시지를 추가한다.
label.item=Item
label.item.id=Item ID
label.item.itemName=Item Name
label.item.price=price
label.item.quantity=quantity
page.items=Item List
page.item=Item Detail
page.addItem=Item Add
page.updateItem=Item Update
button.save=Save
button.cancel=Cancel
이미 위에서 메시지 표현식을 정의해두었기 때문에 국제화는 이걸로 끝난다.
웹 브라우저에서 언어 설정 값 우선순위를 변경하면 국제화 된 것을 확인할 수 있다.
Accept-Language 는 클라이언트가 서버에 기대하는 언어 정보를 담아서 요청하는 HTTP 요청 헤더이다.
메시지 기능은 Locale정보를 알아야 언어를 선택할 수 있다.
스프링도 Locale정보를 알아야 언어를 선택할 수 있다. 그래서 스프링은 언어 선택시 기본으로 Accept-Language헤더의 값을 사용한다.
LocaleResolver
스프링은 Locale 선택 방식을 변경할 수 있도록 LocaleResolver 라는 인터페이스를 제공하는데, 스프링 부트는 기본으로 Accept-Language 를 활용하는 AcceptHeaderLocaleResolver 를 사용한다.
LocaleResolver 변경
만약 Locale 선택 방식을 변경하려면 LocaleResolver 의 구현체를 변경해서 쿠키나 세션 기반의 Locale 선택 기능을 사용할 수 있다
728x90
'Spring' 카테고리의 다른 글
오류 메시지 처리 (0) | 2023.07.14 |
---|---|
검증 - Validation (0) | 2023.07.04 |
메시지와 국제화 (1) | 2023.07.03 |
타임리프 라디오 버튼 (0) | 2023.06.28 |
타임리프 멀티 체크박스 (0) | 2023.06.27 |