【问题标题】:Spring MVC localization - properties file not being foundSpring MVC 本地化 - 找不到属性文件
【发布时间】:2012-07-14 00:24:53
【问题描述】:

我正在尝试在新的 Spring MVC 应用程序中进行基本本地化。我已经尝试了我能想到的一切,但无论我做什么,总是以以下异常告终。任何帮助将不胜感激...

我尝试将属性文件添加到每个目录,但它仍然给我一个错误。一旦我得到它的工作,我会系统地删除额外的。

例外:

07/13/2012 21:06:00.178 [DEBUG] [org.springframework.context.support.ReloadableResourceBundleMessageSource] No properties file found for [messages] - neither plain properties nor XML
07/13/2012 21:06:00.178 [DEBUG] [org.springframework.context.support.ReloadableResourceBundleMessageSource] No properties file found for [messages_en] - neither plain properties nor XML
07/13/2012 21:06:00.179 [DEBUG] [org.springframework.context.support.ReloadableResourceBundleMessageSource] No properties file found for [messages_en_US] - neither plain properties nor XML
07/13/2012 21:06:00.182 [ERROR] [org.springframework.web.servlet.tags.MessageTag] No message found under code 'test.testMessage' for locale 'en_US'.
javax.servlet.jsp.JspTagException: No message found under code 'test.testMessage' for locale 'en_US'.

这是 JSP 条目(fmt:message 只显示 ???test.testMessage??? 而 spring:message 爆炸了):

<h2><fmt:message key="test.testMessage" />!</h2>
<h2><spring:message code="test.testMessage" />!</h2>

这是我的 comparison-servlet.xml 文件中的配置:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="messages" />
</bean>

这是战争结构(请注意,我几乎在每个级别都添加了 messages.properties):

messages.properties
src
    messages.properties
    main
        messages.properties
        java
        ...
        resources
            messages.properties
        webapp
            index.jsp
            messages.properties
            WEB-INF
                comparison-servlet.xml
                web.xml
                messages.properties
                jsp
                messages.properties
                    compare.jsp
                    globalIncludes.jsp
            classes
                messages.properties
            resources
                messages.properties
    test
        ...

知道为什么它找不到肯定存在的文件吗?我是否需要明确设置有关类路径的内容?

【问题讨论】:

  • 顺便说一下,我目前正在 Weblogic 上运行它。我考虑过安装 Tomcat 以查看它是否有效,但想在使用新服务器之前用尽我的选择。

标签: java spring-mvc localization internationalization


【解决方案1】:

尝试将messages.properties放在任意文件夹内的WEB-INF目录下,并使用basename属性设置路径。

例如:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/i18n/messages" />
</bean>

请参阅 Javadoc here。

【讨论】:

  • 我又试了一次,但仍然出错,但是这次我在日志中发现了一些不同的地方。之前有 3 个错误行用于查找消息、messages_en 和 messages_en_US,但现在只搜索 messages_en_US([/WEB-INF/classes/messages] 未找到 MessageSource:找不到基本名称的捆绑包/ WEB-INF/classes/messages,语言环境 en_US)。我还需要添加其他内容以确保它首先查找默认消息和 messages_us 吗?
  • 再看一遍,错误信息现在也不同了。最初它是“找不到 [messages] 的属性文件 - 既不是普通属性也不是 XML”,但现在它是“找不到 MessageSource 的 [/WEB-INF/classes/messages]:找不到基本名称 /WEB- 的捆绑包” INF/类/消息,语言环境 en_US”。不知道这两者之间的区别是什么。
  • 在玩这个的时候,我第一篇文章中列出的错误是我在使用 ReloadableResourceBundleMessageSource 时得到的,无论我是否提供文件的路径。我之前的评论中列出的错误是我使用 ResourceBundleMessageSource 得到的,无论我是提供路径、使用类名:还是仅使用不带扩展名的文件名。
  • 请注意,在我的示例中,我将 .properties 文件放在 i18n 文件夹中,每个文件都带有其语言环境扩展名:messages.properties(默认)、messages_en_US.properties、messages_fr_FR.properties 等。试图将文件放在 WEB-INF 内的文件夹中,而不是放在 WEB-INF/classes 内?也许这并不重要,但你可以试一试。
  • 你可以找到ReloadableResourceBundleMessageSource和ResourceBundleMessageSourcehere的区别。它们几乎相同,但ReloadableResourceBundleMessageSource 有一个可重新加载的缓存。
【解决方案2】:

问题出在战争文件本身。当属性文件被复制到目标目录并显示为好像它们包含在构建中时,maven pom 文件被设置为从构建的工件中明确排除属性文件。

从我的 pom 文件中删除它后,一切都开始正常工作了:

<configuration>
    <packagingExcludes>**/*.properties</packagingExcludes>
</configuration>

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 2014-07-30
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多