IoC컨테이너의 기능 MessageSource에 대해서 알아보려고 합니다. MessageSource는 국제화(i18n)기능을 제공하는 인터페이스 입니다. 즉, 하나의 메시지에 대해 다국어로 번역을 해주는 기능을 제공하는 것입니다.
이전 Environment에 대해 포스팅할 때 보았던 그림입니다. 바로 IoC컨테이너의 기능들을 구현하고 있는 ApplicationContext Interface입니다. 자세히 보면 ApplicationContext Interface
가 상속받고 있는 여러 Interface 중 MessageSource가 보입니다. 이번 시간에는 저 MessageSource Interface
에 대해 공부할 것입니다. 바로 예제를 통해 알아보도록 하겠습니다.
예제
우선 resources하위에 다음과 같은 이름으로 파일 2개를 만듭니다. messages.properties, messages_ko_KR.properties
Spring Boot에서는 messages~
로 시작하는 파일들을 자동으로 messages 번들로 인식하여 그림처럼 묶어주게 됩니다.
@Bean
public ResourceBundleMessageSource messageSource(){
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.addBasenames("messages");
return source;
}
messages.* 를 자동으로 인식하는 이유는 SpringBoot 내부적으로 위의 설정을 가지는 Bean이 등록이 되어있기 때문입니다. ( 다음 링크의 1.15.1 Internationalization using Messagesource 파트를 참고해주세요 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#context-functionality-messagesource )
messages.properties
greeting = hi, {0}
//Message arguments
messages_ko_KR.properties
파일에 다음과 같이 작성합니다. 맨 앞의 greeting
가 message에 해당하며, =
을 기준으로 뒤에 나오는 말이 메세지의 값에 해당합니다. 또한 {}
안에는 message를 사용하는 쪽에서 넘겨주는 파라미터
가 들어오게 됩니다.
messages_ko_KR.properties
xxxxxxxxxx
greeting = 안녕, {0}
//Message arguments
messages_ko_KR.properties
파일에는 다음과 같이 작성합니다. 맨 앞의 greeting
가 message에 해당 하고 =
을 기준으로 뒤에나오는 말이 번역된 말입니다.
2. 사용
xpublic class AppRunner implements ApplicationRunner {
MessageSource messageSource;
public void run(ApplicationArguments args) throws Exception {
System.out.println(messageSource.getMessage("greeting", new String[]{"galid"}, Locale.KOREA));
}
}
== 결과 ==
안녕, galid
사용하는 쪽은 간단합니다. 우선 MessageSource
를 주입받습니다. 그후 MessageSource 객체를 이용하여 getMessage()
메소드에 매개변수로 1. message, 2. argument, 3. Locale
을 넘겨주면 됩니다.
'FrameWork > Spring' 카테고리의 다른 글
Spring - IoC 컨테이너의 기능 - 5 (객체의 값 검증 Validation, Errors) (2) | 2019.04.14 |
---|---|
Spring - IoC 컨테이너의 기능 - 4 (ApplicationEventPublisher 란?) (4) | 2019.04.13 |
Spring - IoC 컨테이너의 기능 - 2 (Environment 란? , 분석 (Property, ConfigurableEnvironment, MutablePropertyResource)) (0) | 2019.04.12 |
Spring - IoC 컨테이너의 기능 - 1 (Bean의 Scope) (0) | 2019.04.11 |
Spring - @Autowired 분석! (2) | 2019.04.10 |