我正在尝试设置一些邮件捆绑。我有我的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
?)
答案 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