首页 > 解决方案 > SpringBoot ResourceBundleMessageSource 与外部远程文件

问题描述

我正在尝试设置 MessageSource 以使用外部文件对我的 Spring Boot 应用程序进行内部化。

基本上,我的想法是让本地化文件开箱即用(例如在 AWS S3 或类似的东西上)。

我正在尝试使用此代码:

@Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

@Bean
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource rs = new ResourceBundleMessageSource();
    rs.setBasename("http://www.myexternalservice.com/messages");
    rs.setUseCodeAsDefaultMessage(true);
    return rs;
}

当我尝试检索消息时,我使用它:

String message = messageSource.getMessage("keyname", null, Locale.US);

但是,在这种情况下,我读入了调试控制台:

ResourceBundle [http://www.myexternalservice.com/messages] not found for MessageSource: Can't find bundle for base name http://www.myexternalservice.com/messages, locale en_US

我也尝试了不同的语言环境。

可能吗?

标签: javaspringspring-bootinternationalization

解决方案


我使用此代码示例解决了:

@Bean
public ReloadableResourceBundleMessageSource messageSource() {

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("http://www.myexternalservice.com/messages");
        messageSource.setCacheSeconds(400);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
}

推荐阅读