4

我正在尝试在 spring 中连接一个 messageSource 以用于我的应用程序。它不工作,给出了这个错误:

org.springframework.context.NoSuchMessageException:在语言环境“en”的代码“validation_required”下找不到消息。

我的applicationContext.xml包含 messageSource 的这个 def:

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

我的消息属性文件位于:

/WEB-INF/classes/messages/messages_en_US.properties

最后,我发出的产生错误的调用是:

String message = messageSource.getMessage("validation_required", null, Locale.ENGLISH);

有人可以在这个时间帮助我吗?

4

4 回答 4

5

看来您的路径不正确。由于您的捆绑包位于 /WEB-INF/classes/messages/messages_en_US.properties 下,因此您的基本名称设置应如下所示:classpath:messages/messages(在这种情况下,基本名称表示路径和属性文件前缀)。

于 2010-12-31T16:17:17.660 回答
4

问题在于您定义资源包的方式和您指定的语言环境(它们与资源包的搜索顺序不匹配。将您的包重命名为“messages_en.properties”或调用“getMessage(... )" 与新的 Locale("en","US")。我更喜欢第一个选项。

于 2010-12-31T06:03:58.020 回答
3

我使用以下 bean,它在不指定文件路径的情况下工作正常:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="messages"/>
</bean>

虽然我使用的文件被简单地称为“messages_en.properties”和“messages_es.properties”,但你明白了。

你打电话时

    messageSource.getMessage("validation_required", null, null);

你有例外吗?尝试使用此文件名 messages_en.properties 或 messages_us_en.properties

于 2010-12-31T16:39:15.790 回答
0

试试这个看看获取字符串的评论

package yours;
import java.util.Locale;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;

/**
 *  
 * Permet la recuperation des String du LocaleContextHolder hors des jsp 
 * Les langues sont placées dans main/ressources/messagesSources.properties 
 * 
 * Example : new MSG("recuperation_name_invalid").value()
 * 
 */
@Configurable
public class MSG
{

    private String key;

    @Resource(name = "messageSource")
    private MessageSource messageSource;

    public MSG(String key)
    {
        super();
        this.key = key;
    }

    public String value()
    {
        Locale locale = LocaleContextHolder.getLocale();

        return messageSource.getMessage(key, new Object[0], locale);
    }

    @Override
    public String toString()
    {
        return value();
    }


}
于 2014-08-20T08:17:14.483 回答