메시지,국제화

KJH·2023년 1월 24일

SpringMVC2

목록 보기
4/12

메시지, 국제화 소개

메시지

기획자가 "상품명" 이란 단어를 모두 "상품이름" 으로 고쳐달라고 하면?
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) 사용자가 직접 언어를 선택하게 만들기

쓸일이 없을것같지만, 생기면 구글검색

0개의 댓글