当默认语言环境为"en"时,ReloadableResourceBundleMessageSource无法找到消息

Ara*_*ram 2 java spring locale resourcebundle internationalization

当Locale.getDefault()返回en时,为什么spring"ReloadableResourceBundleMessageSource"无法找到与代码关联的正确消息,但是当它返回en_US时能够找到正确的消息

默认区域设置:en_US

key: CODE_1, Locale: Locale.US           = Hit
key: CODE_1, Locale: Locale.CANADA       = Hit
key: CODE_1, Locale: fr_CA               = Hit
key: CODE_1, Locale: null (use default)  = Hit
Run Code Online (Sandbox Code Playgroud)

默认区域设置:en

key: CODE_1, Locale: Locale.US               = Hit
key: CODE_1, Locale: Locale.CANADA           = CODE_1
key: CODE_1, Locale: fr_CA                   = CODE_1
key: CODE_1, Locale: null (use default)      = CODE_1
Run Code Online (Sandbox Code Playgroud)

我只有一个在类路径中有CODE_1的包,它是message_en_US.properties

mdm*_*dma 5

该消息仅为en_US语言环境定义,因为它是在message_en_US.properties文件中定义的.从locale en_US(Locale.US)切换到不同行为的原因 en是,如果在请求的语言环境中找不到消息,则默认情况下ReloadableResourceBundleMessageSource退到系统区域设置.

在第一种情况下,何时en_US是默认值,则始终找到消息,因为请求的本地是否为en_US,所以消息源执行回退是en_US在定义消息的位置.

当默认语言环境是en,只有en_US查询有效,因为它正在查找正确的属性文件.对于所有其他消息,在相应的属性文件中找不到该消息,并且在后备区域设置中也找不到该消息en.