만약 화면에 보이는 문구를 대량으로 수정할 일이 있으면 우리는 모든 html을 다 뒤져가며 해당 문자들을 변경해야 한다. 하지만 다양한 메시지를 한 곳에서 관리하는 메시지 기능을 이용하면 번거롭게 html을 뒤지는 작업을 하지 않아도 된다.
예를 들어서 message.properties
라는 관리자용 파일을 만들고
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
각 html들을 해당 데이터를 불러와서 사용하면 된다.
<label for="itemName" th:text="#{item.itemName}"></label>
여기서 더 나가면 메시지에서 설명한 메시지 파일을 각 나라별로 관리하면 서비스를 국제화 할 수 있다.
messages_en.properties
messages_en.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
messages_ko.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
이런식으로 2개의 파일을 만들면 사이트를 국제화 할 수 있다. 한국에서 접근한 것인지 영어에서 접근한 것인지 인식하는 방법은 HTTP accept-language
헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고 쿠키 등을 사용해서 처리하면 된다.
스프링부트는 이런 기능을하는 MessageSource
를 자동으로 스프링 빈으로 등록한다.
MessageSource
를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages
라 는 이름으로 기본 등록된다. 따라서 messages_en.properties
, messages_ko.properties
, messages.properties
파일만 등록하면 자동으로 인식된다.
예시
hello=안녕
hello.name=안녕 {0}
hello=hello
hello.name=hello {0}
message.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>
참고
hello.name=안녕 {0}
<p th:text="#{hello.name(${item.itemName})}"></p>
출처:https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard