Spring MessageSource可以通过多种语言环境找到

时间:2018-02-15 09:03:08

标签: java spring internationalization

我有以下情况:我从移动设备获得了一个区域设置列表,我需要检查我的MessageSource是否与传递的列表有任何匹配。因此,默认情况下,我可以通过一个语言环境进行检查,如果spring找不到匹配项,它将使用默认语言环境,但在我的情况下,我需要检查语言环境列表。春天有没有对此功能的支持?

1 个答案:

答案 0 :(得分:0)

我能够通过以下方式修复它:

    @Bean
    public CustomMessageSource messageSource() {
        CustomReloadableResourceBundleMessageSource messageSource = new CustomReloadableResourceBundleMessageSource();
        messageSource.setFallbackToSystemLocale(false);
        messageSource.setBasename("messages");
        return messageSource;
    }


    public class CustomReloadableResourceBundleMessageSource extends
    ResourceBundleMessageSource implements CustomMessageSource {
    public String getMessage(String code, List<Locale> locales) {
        return locales.stream().map(locale -> getMessage(code, null, locale))
            .filter(StringUtils::isNotEmpty).findFirst()
            .orElse(getMessage(code, null, Locale.ENGLISH));
    }
}

fallbackToSystemLocale 属性设置为false非常重要,因为否则系统会为每个未解析的消息使用默认区域设置。