스프링
메세지 소스, 국제화
gilssang97
2021. 9. 23. 12:16
메세지 소스
공통적으로 처리하는 메시지들을 처리하는데 사용한다.
기본적으로 MessageSource 인터페이스를 구현한 ResourceBundleMessageSource를 스프링 빈으로 등록하여 사용해야 하지만 스프링 부트에서는 자동으로 등록해준다.
이제 메세지 소스에 대해 자세히 살펴보자.
- 메시지는 resources - messages - messages.properties(messages_kr.properties ...)에서 관리되어진다.
- 메시지는 다음과 같이 값을 부여하여 사용할 수 있도록한다.
<label>
<p class="label-txt" th:text="|#{programmer.name} : ${person.name}|"></p>
<p class="label-txt" th:text="|#{programmer.age} : ${person.age}|"></p>
<p class="label-txt" th:utext="|#{programmer.department} : <b>${person.department}</b>|"></p>
<p class="label-txt" th:utext="|#{programmer.major} : <b>${person.major}</b>|"></p>
<p class="label-txt" th:if="${person.notebook}" th:text="|#{programmer.notebook} O|"></p>
<p class="label-txt" th:unless="${person.notebook}" th:text="|#{programmer.notebook} X|"></p>
<div th:each="lan : ${person.lang}">
<p class="label-txt" th:text="|#{programmer.lang} : ${lan}|"></p>
</div>
<p class="label-txt" th:text="|#{programmer.env} : ${person.envs.desc}|"></p>
<p class="label-txt" th:text="|#{programmer.email} : ${person.emailId}@${person.platform}|"></p>
</label>
- Thymeleaf에서 메세지 소스를 사용하려고 하려면 #{메세지코드}와 같이 사용하면 된다.
- 잘 나오는 모습을 확인할 수 있다.
국제화
우리는 메세지 소스를 활용하여 국제화 기능을 사용할 수 있다.
우리가 한글로 등록해놓은 내용을 외국어로 변경하면 된다.
메세지 소스는 messages_ko.properties, messages_en.properties와 같이 등록하면 되는데 스프링에서 자동으로 HTTP Accept-Language 헤더의 값을 보고 설정해준다.
그리고 어느 것도 해당하지 않았을 때, messages.properties가 선택되어 진행된다.
이를 간단한 예제로 살펴보자.
- 다음과 같이 messages_en.properties의 위치, 언어를 적절하게 설정한다.
- 실행해보기 위해 언어 설정을 잠시 변경한다.
- 잘 나오는 모습을 확인할 수 있다.
단순히 언어 변경을 통한 것이 아니라 우리가 셀렉트 박스로 변경하는 것과 같은 동작으로 하기를 원하는 경우 LocaleResolver를 활용하면 된다.