引起:org.springframework.context.NoSuchMessageException:代码下没有找到任何消息

时间:2012-06-20 10:58:59

标签: spring internationalization

试图让Spring国际化运作起来。我使用了classpath:messages basename,为语言创建了.properties文件。它们被核心地复制到web-inf文件夹,代码存在于属性文件中......

这是显示一切的ide,请帮助我。我已经从我已经完成的另一个项目中复制了该设置。我尝试过创建一堆不同的消息文件,但它没有提取任何内容...图片显示了web.xml,spring-servlet.xml和目录结构。

This shows everything, I can't see what I am missing

修改 如果我将bean定义添加到applicationContext而不是spring-servlet,它可以工作..?

4 个答案:

答案 0 :(得分:12)

我会去尝试:

如果文件位于WEB-INF/classes目录下,请尝试:

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

文件的名称应为:

  • messages.properties
  • messages_en.properties
  • messages_en_GB.properties

修改 - 最后一次尝试!

这种编写配置的方式怎么样,在你上次评论后我闻到了这一点:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

<mvc:interceptors>
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>

答案 1 :(得分:3)

将您的消息属性文件保留在类路径(WEB-INF / classes)之外,并将bean定义如下

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

根据文档ReloadableResourceBundleMessageSource,您可以在春天通过cachSeconds获取动态更改消息。此类与ResourceBundleMessageSource的不同之处仅在于指定资源位置。

答案 2 :(得分:0)

所有的配置细节都是正确的,但是在子配置文件中配置一个属性文件,这意味着你的spring-servlet.xml将所有属性配置到applicationContext.xml中,这意味着它将起作用的父配置文件的最大值。尝试并删除spring-servlet.xml中的属性详细信息配置...........

答案 3 :(得分:-1)

虽然对很多人来说这听起来很愚蠢但是我的代码错误之处在于我们编写了自己的MessageSource。这叫做Spring的MessageSource。

但在代码中它就像(MessageSource(MessageSource))。因此,我们正在抬头查看。

删除了额外的电话,现在正在使用。