无法使用messageSource解析spring消息代码

发布于 2024-10-09 12:26:48 字数 875 浏览 6 评论 0原文

我正在尝试在 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);

此时有人可以帮助我吗?

I am trying to hook up a messageSource in spring to use for my application. Its not working, gives this error:

org.springframework.context.NoSuchMessageException: No message found under code 'validation_required' for locale 'en'.

my applicationContext.xml contains this def for messageSource:

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

my messages properties file lives in:

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

Finally, the call i made that generates the error is:

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

Can anyone help me at this hour?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不必了 2024-10-16 12:26:48

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

It seems like your path is not correct.
since you have your bundle under /WEB-INF/classes/messages/messages_en_US.properties, your basename setting should look like: classpath:messages/messages (basename in this case means path and properties file prefix).

傲娇萝莉攻 2024-10-16 12:26:48

问题在于您定义资源包和指定区域设置的方式(它们与资源包的 搜索顺序。将包重命名为“messages_en.properties”或使用 new Locale("en" 调用“getMessage(...)” ,“美国”)。

The problem is with the way you have defined the resource bundle and the locale you are specifying (They doesn't match with the resource bundle's search order. Either rename your bundle to "messages_en.properties" or invoke the "getMessage(...)" with new Locale("en","US"). I prefer the first option.

橘虞初梦 2024-10-16 12:26:48

我使用以下 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

I use following bean and it is working fine without specifying the path to the file:

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

Although the files I use are simply called "messages_en.properties" and "messages_es.properties" well you get the idea.

When you call

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

do you get an exception? Try to use this file name messages_en.properties or messages_us_en.properties

败给现实 2024-10-16 12:26:48

试试这个
查看获取字符串的注释

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();
    }


}

Try this
look at the comment for getting the string

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();
    }


}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文