7.MessageSource

ApplicationContext가 갖고있는 또다른 기능인 MessageSource에 대해 알아보겠다.
ApplicationContext가 MessageSource 인터페이스를 구현한다.

i18n와 관련된 기능인데 메세지를 다국화 하는 기능이다.

스프링 부트를 사용한다면 아래 두개를 바로 만들어 사용할 수 있다.

messages.properties
1
greeting=Hello {0}
messages_ko_kr.properties
1
greeting=안녕, {0}
AppRunner.java
1
2
3
4
5
6
7
8
public class AppRunner implements ApplicationRunner{
@Autowired
MessageSource messageSource; // ApplicationContext로 해도 가능하긴함
...run(){
print(messageSource.getMessage("greeting",new String[]{"sangheon"},Locale.KOREA));
print(messageSource.getMessage("greeting",new String[]{"sangheon"},Locale.getDefault()));
}
}

동작원리? ResourceBundleMessageSource라는 빈이 메세지를 읽어들인다.

직접 MessageSource를 정의해보자
ReloadableResourceBundleMessageSource는 reload가 가능한 것으로서 운영중에 메세지 변경이 가능하다. 즉 프로그램 런타임 중에 빌드를 다시해주면 변경된다.

1
2
3
4
5
6
7
8
@Bean
public MessageSource messageSource() {
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(3);
return messageSource;
}
Share