[Spring Web MVC] 메세지와 국제화
국제화는 특정 설정별로 메세지를 다른 국가의 언어로 제공하는 작업을 말한다.
HTML 파일에 하드코딩된 텍스트들을 하나의 파일에 모아서 관리하는 작업을 메세지를 관리 라고 부른다.
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
messages.properties 처럼 메세지 관리용 파일을 만들어서 HTML에 텍스트를 넣을 때 프로퍼티의 키 값으로 사용한다.
메세지 관리 아이디어에서 조금 더 생각하면 국제화 관리에 대한 아이디어를 얻을 수 있다.
여기서 국제화는 클라이언트가 요청을 보낸 언어 정보에 따라 특정 언어로 HTML을 렌더링 하는 작업을 말한다.
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
(message_en.properties)
이렇게 키는 그대로 두고 값에 대해서 다양한 언어로 파일을 만들어놓는다.
클라이언트의 언어 정보에 따라 다른 프로퍼티로 HTML을 렌더링하는 방식을 사용할 수 있다.
스프링은 기본적인 메세지와 국제화 기능을 모두 제공하고, 타임리프도 스프링이 제공하는 메세지 국제화 기능을 통합해서 제공한다.
메세지 관리 기능을 사용해보자.
원래는 MessageSource 인터페이스를 구현한 ResourceBundleMessageSource를 스프링 빈으로 등록해야 하지만, 스프링 부트를 사용하면 알아서 MessageSource를 자동으로 스프링 빈으로 등록한다.
spring.messages.basename=messages
application.properties 파일에 기본값으로 등록된다.
이제 messages_en.properties, messages_ko.properties 파일을 등록해놓으면 스프링이 알아서 인식한다.
여러 가지 프로퍼티가 있으면 messages.properties가 우선 선택된다.
@Test
void helloMessage(){
String hello = ms.getMessage("hello", null, "default msg" ,null);
Assertions.assertThat(hello).isEqualTo("ㅎㅇ");
}
첫 번째 파라미터로 키를, 두 번째 파라미터로는 치환할 메세지를 Object 타입의 배열로 , 세 번째는 키로 찾지 못할 경우 반환하는 기본 메세지, 네 번째로 지역 정보를 넘겨서 메세지를 받아올 수 있다.
이제 타임리프로 메세지를 적용해서 HTML 을 작성해보자.
타임리프에서 #{...} 를 사용하면 스프링의 메세지를 편하게 조회할 수 있다.
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=취소
(messages.properties)
<h2 th:text="#{page.addItem}">상품 등록</h2>
렌더링하면 <h2>상품 등록</h2> 로 변환해서 나온다.
<p th:text="#{hello.name(${item.itemName})}"></p>
파라미터로 치환할 메세지는 위와 같이 지정해준다.
국제화는 en 버전 프로퍼티를 하나 만들어놓기만 하면 90%는 끝났다.
언어 관련 정보를 가져올 때 스프링은 기본적으로 accept-language 헤더를 참고한다.
Locale 정보를 바꿀 수 있도록 스프링 부트에서는 AcceptHeaderLocalResolver를 사용하는데, 이를 통해 accpet-language 헤더 대신 쿠키나 세션 기반으로 언어를 선택하도록 할 수 있고, 클라이언트가 직접 Locale 정보를 선택하도록 할 수 있다.
'Spring > Spring Web MVC' 카테고리의 다른 글
[Spring Web MVC] Bean Validation (0) | 2022.08.23 |
---|---|
[Spring Web MVC] 데이터 검증 (0) | 2022.08.22 |
[Spring Web MVC] Thymeleaf (2) (0) | 2022.08.20 |
[Spring Web MVC] Thymeleaf (1) (0) | 2022.08.19 |
[Spring Web MVC] Spring MVC와 Thymeleaf 예시 (0) | 2022.08.18 |
댓글
이 글 공유하기
다른 글
-
[Spring Web MVC] Bean Validation
[Spring Web MVC] Bean Validation
2022.08.23 -
[Spring Web MVC] 데이터 검증
[Spring Web MVC] 데이터 검증
2022.08.22 -
[Spring Web MVC] Thymeleaf (2)
[Spring Web MVC] Thymeleaf (2)
2022.08.20 -
[Spring Web MVC] Thymeleaf (1)
[Spring Web MVC] Thymeleaf (1)
2022.08.19