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…这就是为什么我在返回之前将其切换回,但同意“是”可能会在方法调用期间影响其他应用程序功能。您能找到这个问题的答案吗?