我有不同本地化的属性资源文件。我将默认区域设置设置为 Locale.forLanguageTag("en")
。
我像这样检索属性:messageSource.getMessage("email.subject", null, Locale.getDefault().stripExtensions());
但是,我的应用程序失败并出现错误在区域设置“en_US”的代码“email.subject”下找不到消息。
我的属性文件有后缀_en
,所以我明白它找不到它 - 但我的问题是:为什么它搜索语言环境 en_US
而不是 en
?
对于其他语言(没有该区域后缀),它工作正常。
最佳答案
I set my default locale like this Locale.forLanguageTag("en").
方法forLanguageTag
没有设置默认区域设置。 Locale.setDefault(Locale)
确实如此(仅适用于 JVM 的当前实例)。
我的猜测是您的默认区域设置是 en_US
虽然您的代码可能看起来由于某种原因添加了一个区域,但它实际上没有设置新的默认区域设置并保留了原来的 en_US
.
我设置了一个小测试来说明它:
public class MessageSourceTest {
@Rule
public ExpectedException expEx = ExpectedException.none();
@Test
public void test() {
expEx.expectMessage("No message found under code 'email.subject' for locale 'en_CA'");
Locale.setDefault(Locale.CANADA);
Locale.forLanguageTag("en");
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:nonexistingResourceBundleButDoesntMatter");
messageSource.getMessage("email.subject", null, Locale.getDefault().stripExtensions());
}
}
异常是指 Locale.setDefault(Locale.CANADA)
设置的区域设置而不是方法调用 Locale.forLanguageTag("en");
.
关于java - 在区域设置 'email.subject' 的代码 'en_US' 下找不到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59684842/