메시지
화면에 보이는 문구를 수정해야하는 상황을 생각 해 봅시다.
물론, 화면이 별로 없거나 바꿔야할 부분이 공통딘 부분이 많이 없다면?? 별로 어려운 이야기는 아닐 것 입니다.
하지만, 화면이 막 수백 개 되어 버리는데 바꿔야 할 공통 부분이 화면마다 다 있으면?? 이야말로 암울한 상황이죠.
메시지를 한 곳에서 관리가 된다면 한 곳에서만 고쳐주면 이런 문제는 해결 될 것 입니다.
국제화
요즘 구글이나 애플 같은 사이트를 보면 페이지가 영어도 있고 한글도 있고 막 언어가 다양하신 것을 볼 수 있습니다.
이를 메시지 국제화라고 하는데 HTTP의 accept-language 헤더 값을 이용하여 스프링은 국제화의 기본 적인 기능을 제공합니다.
메시지 관리 기능을 위해 스프링에서는 MessageSource를 bean으로 등록 했어야 했지만, 스프링 부트에서는 자동적으로 등록 한다고 합니다!
MessageSource는 /resources/messages.properties를 읽어서 사용하게 됩니다.
국제화 기능을 사용하기 위해서는 messages_en.properties 처럼 뒤에 국가의 정보를 넣어 주시면 됩니다. 일단 default로는 messages.properties를 사용하게 됩니다.
별도의 설정을 하지 않아도 messages라는 이름으로 기본 등록 되지만, 다른 이름으로 메시지를 등록하고 싶으면 application.properties 파일에 spring.messages.basename='하시고싶으신거' 이렇게 등록하시면 됩니다.
저는 오늘 타임리프를 이용하여 제 이름을 한글과 영어로 출력하도록 하겠습니다!
messages.properties
messages_en.properties
화면에 출력한 html파일
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleag.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>messages.properties를 사용하여 이름 출력하기</h1>
<ul>
<li>성 : <span th:text="#{lastname}"></span></li>
<li>이름 : <span th:text="#{firstname}"></span></li>
</ul>
</body>
</html>
결과
한글
영어(국제화)
크롬 브라우저 설정에서 언어를 영어로 바꾸고 실행하시면 됩니다!
Request Header에서 accept-Language
결과
messages.properties에서 영어로 설정한 성과 이름이 표시되는 것을 보실 수 있습니다.
스프링이 국제화를 시킬 수 있는 이유
스프링은 기본적으로 Accept Language를 보고 언어를 선택 합니다.
좀 더 자세히 말하자면 AcceptHeaderLocaleResolver를 사용하여 Locale정보를 알아 냅니다!!
이 글은 인프런 김영한님의 '스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술'을 수강하고 작성합니다.
출처:https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard