메세지
messages.properties 같은 메시지 관리용 파일을 만들어서 여기서 다 관리를 한다.
item=상품
item.id = 상품 ID
item.price = 가격
이것들을 다른 페이지에 다 똑같이 적용시켜서 관리한다.
국제화
messages.properties 를 각 나라별로 관리하면 서비스를 국제화 할 수 있다. 예를 들면 message_en.properties, message_kr.properties 등등
item=Item
item.id=Item ID
item.itemName=Item Name
어느 나라에서 접근했는지 인식하는 방법은 HTTP accep-language 헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고 , 쿠키 등을 사용해서 처리하면 된다.
BUT Spring은 이런 기본적인 메세지와 국제화 기능을 제공해준다.
그냥 스프링을 사용하면 MessageSource을 스프링 빈으로 등록해야한다.
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
ResourceBundleMessageSource는 구현체로 등록을 해주어야한다.
하지만 spring boot에서는 이것들이 이미 처리되어있다.
spring.messages.basename=messages 를 Application.properties에 등록이 기본적으로 되어 있다고 생각하면 된다.
reosurce folder에서 message.properties 와 message_en.properties 를 작성해주면 기본은 한국말로 다 나타날것이다.
hello=안녕
hello.name=안녕 {0}
hello=hello
hello=hello {0}
인자를 받을 수 있다.
@SpringBootTest
public class MessageSourceTest
{
@Autowired
MessageSource messageSource;
@Test
void helloMessage()
{
String result = messageSource.getMessage("hello", null, null);
assertThat(result).isEqualTo("안녕");
}
@Test
void notFoundMessageCode()
{
assertThatThrownBy(() -> messageSource.getMessage("no_code",null,null))
.isInstanceOf(NoSuchMessageException.class);
}
@Test
void notFoundMessageCodeDefaultMessage()
{
String result = messageSource.getMessage("no_code",null,"기본 메세지",null);
assertThat(result).isEqualTo("기본 메세지");
}
@Test
void argumentMessage()
{
String message = messageSource.getMessage("hello.name", new Object[]{"Spring"}, null);
assertThat(message).isEqualTo("안녕 Spring");
}
@Test
void defaultLang()
{
assertThat(messageSource.getMessage("hello",null,null)).isEqualTo("안녕");
assertThat(messageSource.getMessage("hello",null, Locale.KOREA)).isEqualTo("안녕");
}
@Test
void enLang()
{
assertThat(messageSource.getMessage("hello",null,Locale.ENGLISH)).isEqualTo("hello");
}
}
intellij 로 돌릴경우 file > setting > editor > file encoding 에서 Global, Project Encoding , Properties file 를 다 UTF-8 로 고쳐야 문제없이 진행할 수 있다.
이번엔 실제 웹 애플리케이션에 적용을 해보자
설정을 다 완벽히 해주면 따로 배포를 하지않고 크롬상에서 Locale 설정만 바꿔줘도 알아서 바뀐다.
thymeleaf에서 결국은 Spring으로 하여금 messageSource.getMessage를 호출하는것의 결과값을 뿌려주는것이다.
'WEB > Spring MVC 2' 카테고리의 다른 글
Spring MVC 2편 로그인 처리1 쿠키 세션 (0) | 2021.10.10 |
---|---|
Spring MVC 2편 검증2 - Bean Validation (0) | 2021.09.26 |
Spring MVC 2편 검증1 - Validation (0) | 2021.09.05 |
스프링 MVC 2편 - 스프링 통합과 폼 (0) | 2021.08.14 |
스프링 MVC 2편 - 타임리프 기본기능 (0) | 2021.08.13 |