만약 기획자가 상품명이라는 단어를 모두 상품 이름으로 고쳐달라고 한다면?, 수십개의 html 파일에 메시지가 하드코딩되어있기 때문에 매우 불편하다.
message.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
이런 메시지 관리용 파일을 만들고 각 html들은 해당 데이터를 key 값으로 불러서 사용한다
messages_en.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
이러면 국제화가 가능
accept-language
헤더 값을 사용 아니면 사용자가 직접 설정, 쿠키 등을 사용해서 처리message.properties
hello=안녕
hello.name=안녕{0}
@SpringBootTest
public class MessageSourceTest {
@Autowired
MessageSource ms;
@Test
void helloMessage() {
String result = ms.getMessage("hello", null, null);
assertThat(result).isEqualTo("안녕");
}
}
@Test
void notFoundMessageCode(){
assertThatThrownBy(()->ms.getMessage("no-code", null,null)).isInstanceOf(NoSuchMessageException.class);
}
@Test
void argumentMessage(){
String message = ms.getMessage("hello.name", new Object[]{"spring"}, null);
assertThat(message).isEqualTo("안녕 Spring");
}
@Test
void enLang() {
assertThat(ms.getMessage("hello", null, Locale.ENGLISH)).isEqualTo("hello");
}
#{...}을 사용하면 스프링의 메시지를 편리하게 조회 할수 있음