FrameWorks/Spring & Boot

[Spring Object] MessageSource

ABCD 2025. 2. 6.

MessageSource

ResourceBundleMessageSource는 가장 많이 쓰이는 MeessageSource 구현체로 다국어를 사용 할 때 사용합니다.

alert.checkout=A shopping cart has been checked out.
alert.inventory.checkout=A shopping cart with {0} has been checked out at {1}

 

Bean 인스턴스는 반드시 messageSource라고 명명해야 컨텍스트가 알아서 감지합니다.
setBasenames()로 message로 시작하는 파일들을 찾도록 설정하고 캐시주기는 1초로 설정합니다.

 

각 Locale별로 리소스 번들 파일을 제일 먼저 찾아가고, 파일이 없는 경우 message_en.properties파일을 찾게됩니다. 만약 이 파일마저 없다면 기본파일인 message.properties파일을 선택합니다.

@Configuration
public class ShopConfiguration {

    @Bean
    public ReloadableReosurceBundleMessageSource messageSource() {
        ReloadalbeResourceBundelMessageSource messageSource = new ReloadalbeResourceBundelMessageSource();
        messageSource.setBasenames("classpath:message");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }
}

 

getMessage() 메서드로 메시지를 해석 할 수 있습니다.

  • 첫번째 인자 : key를 지정
  • 두번째 인자 : {0~}에 선언된 parameter에 삽입할 데이터를 생성하여 삽입
  • 세번째 인자 : Locale지정
public class Main {
    public static void main(String[] args) throws Exception {

        ApplicationContext context = new AnnotationConfigApplicationContext(ShopConfiguration.class);

        String alert = context.getMessage("alert.checkout", null, Locale.US);
        String alert.inventory =  context.getMessage("alert.inventory.checkout", new Object[] {"[DVD-RW 3.0]", new Date()}, Locale.US);

        System.out.println("The I18N message for alert.checkout is : " + alert);
        System.out.println("The I18N message for alert.inventory.checkout is : " + alert_inventory);
    }
}

 

Main 클래스는 ApplicationContext를 직접 가져 올 수 있지만, 텍스트 메시지를 해석하는 Bean에는 MessageSource구현체를 넣어야 합니다.

@Component
public class Cashier {

    @Autowired
    private MesaageSource messageSource;

    public void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    public void checkout(ShoppingCart cart) throws IOException {
        String alert =  context.getMessage("alert.inventory.checkout", cart.getItems(), new Date()}, Locale.US);
        System.out.println(alert);
    }
}
728x90
반응형

'FrameWorks > Spring & Boot' 카테고리의 다른 글

[Spring Object] TaskExcutor  (0) 2025.02.06
[Spring Object] Resource  (0) 2025.02.06
[Spring Object] ApplicationEvent  (0) 2025.02.03
[Spring Object] Aware  (0) 2025.02.03
[Spring Object] AbstractFactoryBean  (0) 2025.01.21

댓글

💲 추천 글