java - 在区域设置 'email.subject' 的代码 'en_US' 下找不到消息

标签 java spring localization

我有不同本地化的属性资源文件。我将默认区域设置设置为 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/

相关文章:

java - JPA EntityManager 注入(inject)失败

JavaCpp:如何指定 native 库?

java - Spring MVC : form : radiobutton for Boolean property

html - 使用 CSS 文件进行站点本地化

ios - 本地化 iPhone 应用程序中的系统按钮使用随机语言

java - 如何清除 Java 中的控制台 - Eclipse

java - MongoDb 与 SpringData - 在后台创建所有索引的全局设置

java - Spring MVC 网站管理/配置页面的推荐数据模型和数据源?

java - 更改预定义 java 日期格式化程序的格式

java - 更改外观会更改 JTextPane 的颜色吗?