메시지, 국제화 소개#
메시지#
기획자가 “상품명” 이란 단어를 모두 “상품이름” 으로 고쳐달라고 하면?
HTML 파일에 메시지가 하드코딩 되어 있어 모든 화면을 고쳐야 한다 ㅅㅂ
이런 다양한 메시지를 한 곳(파일)에서 관리하는 기능을 메시지 기능이라 한다.
EX)
messages.properties라는 파일을 만들고
item=상품
item.itemName=상품명
...HTML에서 해당 데이터를 key값으로 불러서 사용한다
addForm.html
<label for="itemName" th:text="#{item.itemName}"></label>
국제화#
위의 messages.properties를 각 나라별로 관리하면, 서비스를 국제화 가능
스프링은 기본적인 메시지와 국제화 기능을 제공하고, 타임리프도 이와 통합해서 제공
스프링 메시지 소스 설정#
스프링부트를 사용하면, 스프링부트가 MessageSource를 자동으로 빈에 등록
application.properties(소스 기본 값)
resources 밑의messages.properties 파일 기본 인식
(파일명 마지막에 언어정보가 있는 파일도 인식한다 ex)messages_en.properties )
spring.messages.basename=messages/src/main/resources/messages.properties
hello=안녕
hello.name=안녕 {0}/src/main/resources/messages_en.properties
hello=hello
hello.name=hello {0}웹 애플리케이션에 메시지 적용하기#
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=취소타임리프 메시지 표현식 #{...}
ex) “상품"을 조회하려면 #{label.item}
messages.properties에 설정된 값을 변경하면, 모든 메시지가 바뀐다!!
참고
hello.name=안녕{0}
<p th:text="#{hello.name(${item.itemName})}"></p>이런 식으로 파라미터받아서도 사용가능
국제화 적용#
messages_en.properties에 영어로 지정해주면 끝!!
Request header의 Accept-Language:에 따라 변환될것임
LocaleResolver 인터페이스
Locale선택 방식을 변경하려면, LocaleResolver 구현체를 변경해서 사용
ex) 사용자가 직접 언어를 선택하게 만들기
쓸일이 없을것같지만, 생기면 구글검색