Spring 3 mvc命名空间和i18n

时间:2010-06-18 15:03:42

标签: spring spring-mvc internationalization

i18n和Spring 3 mvc命名空间的问题

在使用Spring的mvc名称空间时,我还没弄清楚如何解析消息。

例如,具有以下行的JSP:

<fmt:message key="welcome.title"/>

所示:

???welcome.title???

我在WEB-INF下有一个带有messages.properties的消息目录。

这是web-servlet.xml(我的调度程序servlet名为web)。非常感谢任何帮助。

<!-- Scans for @Controllers to deploy as beans -->
<context:component-scan base-package="com.mylittlecompany.web.controllers" />

<!-- Enable annotation driven controllers, validation etc... -->
<mvc:annotation-driven />

<!-- Configures Handler Interceptors -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

<!-- Application Message Bundle -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/messages/messages" />
    <property name="cacheSeconds" value="1" />
</bean>

<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />

<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

仅相关的日志文件条目:

DEBUG Thread-1 org.springframework.web.context.support.XmlWebApplicationContext - Using MessageSource [org.springframework.context.support.ReloadableResourceBundleMessageSource: basenames=[/WEB-INF/messages/messages]]

4 个答案:

答案 0 :(得分:2)

ResourceBundle现在正在查找不存在的包“/ WEB-INF / messages”中的文件。

尝试将“messages”目录放到WEB-INF / classes中,并将messageSource bean替换为:

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

答案 1 :(得分:1)

将以下代码放在applicationContext.xml

<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <beans:property name="basenames">
            <beans:list>
             <beans:value>messages</beans:value>
            </beans:list>
        </beans:property>
</beans:bean>

将您的messages.properties放入WEB-INF / classes

在你的jsp中你可以引用像

这样的消息
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<input name="reset" type="reset" value='<spring:message code="button.reset"/>' onclick="setLoginFocus()" />

和你的messages.properties

button.reset=ResetFields

答案 2 :(得分:1)

实际上,问题是WEB-INF不在classpath上,因此你的messages.properties没有被提取。

将它放在WEB-INF / classes或WEB-INF / lib下(虽然它们不是放置.properties文件的好地方)。

我建议你把它放在: -

src / main / resources / OR(src / main / resources / META-INF)

  • SE

修改

<property name="basename" value="messages/messages" />

答案 3 :(得分:0)

我最近完成了一个具有广泛本地化的Spring 3项目,并使用了spring:message标签而不是fmt:message。您可以尝试使用spring:message来查看行为是否发生变化。它应该找到您的消息源并按当前区域设置解析消息密钥。