메시지, 국제화
❗ 기획자가 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하였다면?
-> 단어를 다 찾아가면서 모두 변경해야 한다 => 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문
❓ 하드코딩
ex) <h2>상품 등록 폼<h2>
=> 상품 등록 폼과 같이 박혀 있는 코드를 말한다
💡 메시지
- 다양한 메시지를 한 곳에서 관리하도록 하는 기능
1. messages.properties 메시지 관리용 파일 작성한다
2. HTML에 key 값으로 해당 데이터를 불러 사용한다 => 타임리프 이용 #{ key }
💡 국제화
- 메시지 파일 (messages.properties)을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다
ex) messages_en.properties / messages_ko.properties
💡 스프링 메시지 소스 설정
- 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다
- 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록한다
=> 직접 등록하는 방법/ 스프링 부트 이용
- 직접 등록
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
📌 스프링 부트 이용
: 스프링 부트가 자동으로 MessageSource를 스프링 빈으로 등록한다
: MessageSource를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면
messages라는 이름으로 기본 등록된다
스프링 부트 메시지 소스 기본 값
< application.properties >
spring.messages.basename=messages
💡 메시지 실제 적용
- 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=취소
- 타임리프 메시지 표현식 이용해 조회 #{ }
<h2>상품 등록</h2>
<h2 th:text="#{page.addItem}">상품 등록</h2>
=> 둘다 <h2>상품 등록</h2>로 보여진다
💡 국제화 적용
- messages_en.properties 작성하기
label.item=Item
label.item.id=Item ID
label.item.itemName=Item Name
label.item.price=price
label.item.quantity=quantity
page.items=Item List
page.item=Item Detail
page.addItem=Item Add
page.updateItem=Item Update
button.save=Save
button.cancel=Cancel
- 이미 메시지 적용으로 #{ } 해뒀다
- 웹 브라우저의 언어 설정 값을 변경해 국제화 적용이 되었나 확인하자