1. 메세지, 국제화 소개


메세지

화면에서 공통으로 사용되는 다양한 메세지를 한 곳에서 관리하도록 하는 기능을 메세지 기능이라 한다.

메세지 기능을 사용하지 않을 경우 우리는 모든 메세지를 각각 하드코딩으로 입력해야한다.

<div>
    <label for="itemId">상품 ID</label>
    <input type="text" id="itemId" name="itemId" class="form-control" value="1" th:value="${item.id}" readonly>
</div>
<div>
    <label for="itemName">상품명</label>
    <input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly>
</div>
<div>
    <label for="price">가격</label>
    <input type="text" id="price" name="price" class="form-control" value="10000" th:value="${item.price}" readonly>
</div>
<div>
    <label for="quantity">수량</label>
    <input type="text" id="quantity" name="quantity" class="form-control" value="10" th:value="${item.quantity}" readonly>
</div>

아이템 상세를 보여주는 위 HTML 태그들에는 각각 하드코딩으로 상품ID, 상품명, 가격, 수량이 적혀있다.

또한 해당 명칭들은 나머지 다른 많은 페이지에서 공통으로 쓰이고 있다고 할 때 기획 변경으로 상품명을 제품명으로 바꿔야 한다면 어떨까? 메세지 기능을 사용하지 않았다면 모든 소스파일에서 하나하나 상품명이라 적혀있는 곳을 찾아 제품명이라 바꿔줘야한다.

하지만 만약 메세지 기능을 사용했다면 다음과 같이 메세지를 변수화 하여 key 값으로 불러 사용하 수 있다.

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

국제화

이제 메세지를 한 곳에 모아서 기획자의 기획변경에도 어려움없이 메세지를 바꿀 수 있다.

그다음으로 이제 서비스가 제공되야하는 곳이 다른 언어권이라면 어떨까? 메세지 내용을 바꾸기엔 기존 서비스 언어권 국가에는 그대로 제공이 되야한다. 이럴 경우 메세지 파일(message.properties)를 각 나라별로 별도로 관리하여 국제화 기능을 제공할 수 있다.

예를 들어 한국과 영어 두 언어가 제공되야 한다면 다음과 같이 두 개의 파일을 만들어 분류할 수 있다.