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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ResourceBundleMessageSource中设置默认语言环境?相关的知识,希望对你有一定的参考价值。

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

mymessage_de.properties
mymessage_en.properties

我想创建一个消息包,默认情况下,如果无法解析该包,则应该回退到_de。但是在英语机器上,捆绑包总是回到系统默认状态。这是_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;
    }
答案

看看documentation#setFallbackToSystemLocale

设置是否在找不到特定区域设置的文件时是否回退到系统区域设置。默认为“true”;如果关闭此选项,则唯一的回退将是默认文件(例如,对于basename“messages”的“messages.properties”)。

所以,你真的可以做的是通过将文件名从_de更改为mymessage_de.properties来将“默认”更改为mymessage.properties。您可以在文档中记下相应的效果。

另一答案

切换区域设置怎么样?

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;
    } 

以上是关于如何在ResourceBundleMessageSource中设置默认语言环境?的主要内容,如果未能解决你的问题,请参考以下文章