如何在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中设置默认语言环境?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?