Spring #7 - MessageSource

업데이트:

IoC 컨테이너와 빈

Ioc 컨테이너 7부 : MessageSource

MessageSource

  • ApplicationContext가 갖고있는 기능 중 하나이다.

  • 국제화(i18n) 기능을 제공, 메세지를 다국화하는 인터페이스이다.

  • 스프링 부트에서는 별다른 설정 없이 messages.properties를 이용하여 사용 할 수 있다. default가 왜 한글로 나오는 걸까?

    // file : messages.properties
    greeting=Hello {0}
      
    // file : messages_en_CA.properties
    greeting=hey {0}
      
    // file : messages_ko_KR.properties
    greeting=안녕, {0}
    
    @Component
    public class AppRunner implements ApplicationRunner {
      
        @Autowired
        MessageSource messageSource;
      
        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println(messageSource.getClass());
            System.out.println(messageSource.getMessage("greeting", new String[]{"Henry"}, Locale.KOREA));
            System.out.println(messageSource.getMessage("greeting", new String[]{"Henry"}, Locale.CANADA));
            System.out.println(messageSource.getMessage("greeting", new String[]{"Henry"}, Locale.getDefault()));
        }
    }
    
    // result
    class org.springframework.context.support.ResourceBundleMessageSource
    안녕, Henry
    hey Henry
    안녕, Henry
    
  • Reloading 기능이 있는 메세지 소스 사용하기. 캐시 설정을 하였다.

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

댓글남기기