Spring MessageSource 似乎忽略了 属性 fallbackToSystemLocale
Spring MessageSource seems to ignore property fallbackToSystemLocale
我在配置 Spring MessageSource 以忽略我的系统区域设置时遇到问题。当我使用 null 区域设置参数调用 getMessage 时,我希望我的 MessageSource 选择默认 属性 文件 messages.properties。相反,它选择 messages_en.properties。当我将此 属性 文件的名称更改为 messages_fr.properties 时,将选择默认的 属性 文件。我的系统语言环境是 'en'。所以 MessageSource 似乎忽略了我设置为 false 的 fallbackToSystemLocale 属性。
此行为与 Spring 版本 4.1.4 和 4.1.5 相同。
消息源配置:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="fallbackToSystemLocale" value="false"></property>
<property name="basenames">
<list>
<value>locale/messages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
收到消息:
String message = messageSource.getMessage("user.email.notFound", new Object[] {email}, null);
感谢任何建议!
fallbackToSystemLocale
NOT 旨在引导消息源在您使用 locale=null
调用它们时执行的操作
fallbackToSystemLocale
控制当您请求的消息(代码)对于所请求的本地不存在时要执行的操作 - 要么是因为根本没有该语言的消息属性文件,要么只是因为消息文件不包含消息代码
另一方面,当您使用 locale=null
(messageSource.getMessage("key", null);
) 调用 getMessage
时,语言环境将由 Locale.getDefault
设置
org.springframework.context.support.AbstractMessageSource:
protected String getMessageInternal(String code, Object[] args, Locale locale) {
...
if (locale == null) {
locale = Locale.getDefault();
}
...
在考虑 fallbackToSystemLocale
属性 之前。
因此,最简单的 hack-arround(这不是一个 workarround,它是一个 hack),将使用您不支持的语言而不是 null
:
messageSource.getMessage("key", new Locale("XX"));
我在配置 Spring MessageSource 以忽略我的系统区域设置时遇到问题。当我使用 null 区域设置参数调用 getMessage 时,我希望我的 MessageSource 选择默认 属性 文件 messages.properties。相反,它选择 messages_en.properties。当我将此 属性 文件的名称更改为 messages_fr.properties 时,将选择默认的 属性 文件。我的系统语言环境是 'en'。所以 MessageSource 似乎忽略了我设置为 false 的 fallbackToSystemLocale 属性。
此行为与 Spring 版本 4.1.4 和 4.1.5 相同。
消息源配置:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="fallbackToSystemLocale" value="false"></property>
<property name="basenames">
<list>
<value>locale/messages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
收到消息:
String message = messageSource.getMessage("user.email.notFound", new Object[] {email}, null);
感谢任何建议!
fallbackToSystemLocale
NOT 旨在引导消息源在您使用 locale=null
fallbackToSystemLocale
控制当您请求的消息(代码)对于所请求的本地不存在时要执行的操作 - 要么是因为根本没有该语言的消息属性文件,要么只是因为消息文件不包含消息代码
另一方面,当您使用 locale=null
(messageSource.getMessage("key", null);
) 调用 getMessage
时,语言环境将由 Locale.getDefault
org.springframework.context.support.AbstractMessageSource:
protected String getMessageInternal(String code, Object[] args, Locale locale) {
...
if (locale == null) {
locale = Locale.getDefault();
}
...
在考虑 fallbackToSystemLocale
属性 之前。
因此,最简单的 hack-arround(这不是一个 workarround,它是一个 hack),将使用您不支持的语言而不是 null
:
messageSource.getMessage("key", new Locale("XX"));