spring mvc i18n:如果密钥不在属性文件中,如何设置默认区域设置?
假设如果我的其中一个属性文件中没有密钥,我会收到如下异常:
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'label.cancel' for locale 'en '。
假设如果它在我的 messages_ch_CN.properties 中不可用,是否有任何方法可以在该文件中不存在它时应该检查 messages_en_En 文件。 或者是否有人已经实施了任何解决办法。
suppose if i don't have a key in my one of the properties file i get a exception like :
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'label.cancel' for locale 'en'.
suppose if it is not available in my messages_ch_CN.properties is there any way that if it is not present in that file it should check in messages_en_En file.
or is there any work around any one has implemented.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
例如,您有: 2 种语言
messages.properties
这是默认属性,它始终包含整个应用程序中使用的每个键。和
NAME-servlet.xml
:
- 表示如果您没有属性messages_ch_CN.properties
或messages_en_EN.properties
或者在这些属性之一中没有必要的键,例如:title,spring将使用messages.properties
作为默认值,如果
- spring 使用部署环境的用户区域设置,但它不好,因为用户的部署环境可能与我们提供的语言不同。如果用户的区域设置与我们提供的语言不同,spring 会使用messages.properties
。For example you have: 2 language
messages.properties
this is default property, which always contains every key used throughout your application.and
NAME-servlet.xml
:<property name="fallbackToSystemLocale" value="false"/>
- says that, if you don't have propertymessages_ch_CN.properties
ormessages_en_EN.properties
or in one of those property there is no necessary key, for example: title, spring will usemessages.properties
as defaultif
<property name="fallbackToSystemLocale" value="true"/>
- spring uses user locale of deployment environment, but it not good because user's deployment environment, can different from the languages that we have provided. If user's locale different from the languages that we have provided, spring usesmessages.properties
.一种解决方法是对您正在使用的
messageSource
进行子类化(即ReloadableResourceBundleMessageSource
)并覆盖它的resolveCode()
,这样:然后使用新创建的类作为
messageSource
。One workaround would be to subclass the
messageSource
you're using (ieReloadableResourceBundleMessageSource
) and override it'sresolveCode()
so that:super.resolveCode(code, locale)
).super.resolveCode(code, defaultLocale)
).Then use that newly created class as
messageSource
.始终提供默认的
messages
文件(没有locale
规范),该文件始终包含整个应用程序中使用的每个键。如果不子类化其中一个ResourceBundle
实现,就不可能自动查找所选语言环境之外的另一种语言环境
。Always provide a default
messages
file (withoutlocale
specification), which always contains every key used throughout your application. It is not possible to look automatically for anotherlocale
than the chosen one without subclassing one of theResourceBundle
implementations.