默认的ResourceBundleMessageSource有什么意义?

时间:2016-02-02 06:18:17

标签: java spring

我正在尝试设置一些邮件捆绑。我有我的2个文件:

message.properties
message_en_US.properties

豆类:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages" />
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="en_US"/>
</bean>

实现:

 msgSrc.getMessage(key, null, Locale.getDefault());

一切正常,但我很困惑为什么很多教程都有message.properties文件,因为如果我摆脱了localeResolver并将实现设置为

 msgSrc.getMessage(key, null, Locale.ENGLISH);

它仍然会查看messages_en_US,如果摆脱localResolver仍然是用户Locale.getDefault,它会使用我的本地计算机,这也是en_US。

我可以专门设置message.properties,但是当地人不能工作。

那么在什么情况下message.properties会被使用?

我觉得我错过了一个概念。

(有没有办法设置它,以便如果Spring找不到messages_en_US.properties中的密钥,它会查看messages.properties?)

2 个答案:

答案 0 :(得分:1)

我认为如果spring没有找到具有指定语言环境的属性(使用Locale.getDefault或从系统获取),那么&#39; message.properties&#39;将会被使用。因此,您只需删除messages_en_US.properties文件,并使用messages.properties作为en_us和其他区域设置的默认值。

答案 1 :(得分:0)

  

但我很困惑为什么很多教程都有ON

首先,这是基本的Java功能,由java.util.ResourceBundle提供。

简单: 如果您为某个区域设置(:currentUserId)请求了消息属性值,并且该属性在en_US属性文件中不存在,则SELECT a. * , b.property_id AS fav, b.user_id FROM `property_for_sale` a LEFT OUTER JOIN `cpo_favourite_property` b ON a.id = b.property_id AND b.user_id = :currentUserId WHERE a.property_type = 'Commercial' UNION SELECT a. * , b.property_id AS fav, b.user_id FROM `property_for_rent` a LEFT OUTER JOIN `cpo_favourite_property` b ON a.id = b.property_id AND b.user_id = :currentUserId WHERE a.property_type = 'Commercial' ORDER BY id DESC 将在下一个更常见的区域设置中查找该属性({{1} }),如果那里不存在,那么它将在&#34;默认&#34;中寻找属性。属性文件。

在你的Spring示例中,您有两个步骤, - 首先确定客户端请求的本地(message.properties), - 第二次获取密钥(和区域设置)的消息

因此,如果您希望使用en_US中的值,则需要将存储在用户会话中的本地设置为与ResourceBundle不同的内容,例如:{{1}当然,你需要使用spring消息标记,而不是en另一个例子是你直接请求属性为&#34;不存在&#34;语言:localeResolver