Spring框架:在locale代码下找不到任何消息

use*_*206 12 spring message spring-mvc

这是我的messageResource声明

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <!-- Auto-detect controllers in this package -->
    <context:component-scan base-package="levelup.world.web" />

    <!-- Prepend /WEB-INF/jsp/ and append .jsp to the view name -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- Access resource bundles with the specified basename -->
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
        p:basename="/WEB-INF/messages/" />

</beans>
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,会出现此错误

No message found under code 'country.plural' for locale 'fil_PH'
Run Code Online (Sandbox Code Playgroud)

现在在web-inf里面的我的消息文件夹里面,我有以下消息属性

messages_en.properties
messages_fr.properties
messages.properties
Run Code Online (Sandbox Code Playgroud)

我在这里失踪了什么?

n1c*_*las 23

一般来说,这样的问题不是因为不存在的语言环境,而是因为MessageBundle配置不当.在您的情况下,您似乎需要删除基本名称中的"/".

<bean id="messageSource"
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
     p:basename="/WEB-INF/messages" />
Run Code Online (Sandbox Code Playgroud)

为什么会这样:

如果你有messages.propertiesmessages_en.properties捆绑,那么捆绑名称是messages.如果你在WEB-INF文件夹中有它们,那么basename就是/WEB-INF/messages,即根据/ path/to/bundle/bundlename.如果你有messages.properties内部/WEB-INF/messages文件夹,然后相应的基本名称是/WEB-INF/messages/messages.

  • 让我们看看:如果你有`messages.properties`和`messages_en.properties`包,那么包名是`messages`.如果你在`WEB-INF`文件夹中有它们,那么basename是`/ WEB-INF/messages`,即根据`/ path/to/bundle/bundlename`.如果在`/ WEB-INF/messages`文件夹中有`messages.properties`,那么对应的basename是`/ WEB-INF/messages/messages` (4认同)

rop*_*opo 10

对于春季靴子你需要这样的东西:

@Bean
public MessageSource messageSource() {
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
     messageSource.setBasename("/WEB-INF/classes/messages");
     return messageSource;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

对于 spring boot 文件夹资源,您需要添加 Bean 的名称:

@Bean(name="messageSource")
public ResourceBundleMessageSource bundleMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
Run Code Online (Sandbox Code Playgroud)