Java 如何在ResourceBundleMessageSource中设置默认语言环境?

Java 如何在ResourceBundleMessageSource中设置默认语言环境?,java,spring,spring-boot,internationalization,Java,Spring,Spring Boot,Internationalization,我在/resources中有两个语言文件: mymessage_de.properties mymessage_en.properties 我想创建一个消息包,如果无法解析该包,则默认情况下该消息包应返回到\u de。但是在英国机器上,捆绑包总是返回到系统默认值。这是\u en 我可以通过设置bundle.setFallbackToSystemLocale(false)来禁用它,这将导致一条空消息 问题:如何设置要使用的默认区域设置 @Bean public MessageSo

我在
/resources
中有两个语言文件:

mymessage_de.properties
mymessage_en.properties
我想创建一个消息包,如果无法解析该包,则默认情况下该消息包应返回到
\u de
。但是在英国机器上,捆绑包总是返回到系统默认值。这是
\u en

我可以通过设置bundle.setFallbackToSystemLocale(false)来禁用它,这将导致一条空消息

问题:如何设置要使用的默认区域设置

    @Bean
    public MessageSource messageBundleBlank() {
        ResourceBundleMessageSource bundle = new ResourceBundleMessageSource();
        bundle.setBasenames("mymessage");
        bundle.setDefaultEncoding(StandardCharsets.UTF_8.name());
        bundle.setFallbackToSystemLocale(false);
        //TODO how can I set a fallback to 'messages_de.properties'?
        return bundle;
    }
请查看
#setFallbackToSystemLocale

设置在没有文件的情况下是否返回到系统区域设置 已找到特定的区域设置。默认值为“true”;如果这是转向 禁用时,唯一的回退将是默认文件(例如。 basename“messages”的“messages.properties”


因此,实际上,您可以在这里将文件名从
mymessage\u de.properties
更改为
mymessage.properties
,从而将“默认”更改为
\u de
。您只需在文档中记下即可。

切换区域设置如何

public MessageSource messageBundleBlank() {
        boolean localeSwitched=false;
        if (Locale.getDefault().getLanguage().equalsIgnoreCase("en"))   {
            Locale.setDefault(Locale.GERMAN);
            localeSwitched=true;
        }
        ResourceBundleMessageSource bundle = new ResourceBundleMessageSource();
        bundle.setBasenames("mymessage");
        bundle.setDefaultEncoding(StandardCharsets.UTF_8.name());

        if(localeSwitched)  {
            Locale.setDefault(Locale.ENGLISH);
        }
        return bundle;
    } 

切换全局区域设置将对应用程序本身产生广泛的影响,例如datetime格式、货币格式等。因此,我宁愿使用默认的区域设置。只是默认的消息包不应该是en…这就是为什么我在返回之前将其切换回,但同意“是”可能会在方法调用期间影响其他应用程序功能。您能找到这个问题的答案吗?