MessageSource
국제화 i18n 기능을 제공하는 인터페이스.
즉, 메시지 다국화 방법입니다.
예를 들어 각 나라별 언어에 따른 메시지를 각 웹에 지정되어있는 언어마다 다르게 보여줄 수 있습니다.
깔금하게 정리하자면 MessageSource를 통해 영어, 한국어, 중국어 등 다양한 언어로 웹 서비스를 제공할 수 있습니다.
ApplicationContext extends MessageSource
-
AppRunnser 를 만들고
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
// ApplicationContext ctx;
@Override
public void run(ApplicationArguments args) throws Exception {
out.println( messageSource.getMessage("a",new String[]{"누구누구"}, Locale.KOREA));
out.println( messageSource.getMessage("a",new String[]{"누구누구"}, Locale.getDefault()));
}
=> 출력으로 서로 다른 msg가 출력될 것입니다!.
정상 출력을 원하시면 a변수를 따로 설정하시고 AppRunner sout 부분에 a->b 하나만 바꾸시면 됩니다.
하지만 같은 값이 출력되신다면!
**이마 JVM이 구동될 때 OS 환경 변수 등에서 정보를 읽어 설정하는 것 같습니다. 따라서 사용하시는 운영체제에 설정된 (기본) 언어가 한국어라 그렇게 된거라 추측해 봅니다.**
※messageSource.getclass() 를 찍어보시면 ResourceBundleMessageSource 출력이 되는데 이것이 빈으로 등록되어 있는 모습을 보실수 있습니다. 그래서 message라는 번들을 담고있어 읽어올수 있는 것입니다.
또한 리로딩 기능을 가지고 있습니다.
즉 실행하는 도중에 properties 의 값을 바꾸게 되면 바꾼 값을 축력해주는 기능입니다.
꼭 빌드를 진행해야 합니다.
예를들자면,
public void run(ApplicationArguments args) throws Exception {
while (true)
{
out.println( messageSource.getMessage("a",new String[]{"KBY_TECH"}, Locale.KOREA));
out.println( messageSource.getMessage("a",new String[]{"KBY_TECH"}, Locale.getDefault()));
Thread.sleep(1000); // 이부분만 추가
}
}
public static main method 로 돌아가
@Bean
public MessageSource messageSource()
{
var source=new ReloadableResourceBundleMessageSource();
source.setBasename("classpath:/messages");
source.setDefaultEncoding("UTF-8");
source.setCacheSeconds(3); // 캐시하는 시간 3초로 두고
return source;
}
캐시하는 시간을 3초로 두고 실행시키고 메시지 프로퍼티들의 값을 바꿔 빌드를 진행하시면 다른 msg가 출력됨을 확인 할 수 있습니다.
'Spring > Spring_CoreTechnologies' 카테고리의 다른 글
SpringFrameWork CoreTechnition_section4_11부 (0) | 2020.11.20 |
---|---|
SpringFrameWork CoreTechnition_section1_7부 (0) | 2020.11.19 |
SpringFrameWork CoreTechnition_section1_5부 (0) | 2020.11.18 |
SpringFrameWork CoreTechnition_section1_4부 (0) | 2020.11.17 |
SpringFrameWork CoreTechnition_section1_3부 (0) | 2020.11.17 |
댓글