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

时间:2018-09-06 15:17:33

标签: java spring spring-boot internationalization

我在/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;
    }

2 个答案:

答案 0 :(得分:1)

看看#setFallbackToSystemLocale的{​​{3}}:

  

设置在没有文件的情况下是否回退到系统区域设置   已找到特定的语言环境。默认值为“ true”;如果这被转   关闭,唯一的后备将是默认文件(例如   “ messages.properties”为基本名称“ messages”)。

因此,实际上,您可以在这里通过将文件名从_de更改为mymessage_de.properties来将“默认”更改为mymessage.properties。您可以在文档中为此做个注释。

答案 1 :(得分:0)

切换语言环境如何?

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