Java 在区域设置“en_us”的代码“user.status.A”下未找到消息

Java 在区域设置“en_us”的代码“user.status.A”下未找到消息,java,spring,spring-mvc,messages,applicationcontext,Java,Spring,Spring Mvc,Messages,Applicationcontext,我试图为不同类型的消息、用户消息、字段标签/按钮、数据值维护单独的文件。在这次尝试中,我试图获得不同数据值的描述。例如,UserStatus a可能显示为Active或Activo <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="defaultEncoding" value

我试图为不同类型的消息、用户消息、字段标签/按钮、数据值维护单独的文件。在这次尝试中,我试图获得不同数据值的描述。例如,UserStatus a可能显示为Active或Activo

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="basenames">
        <list>
            <value>WEB-INF/locale/messages/messages</value>
            <value>WEB-INF/locale/fields/fields</value>
            <value>WEB-INF/locale/values/values</value>
        </list>
    </property>
</bean> 
我想为我可以从中获取本地化值的每种类型的值构建一个枚举。在下面的代码中,我对传递给get消息的值进行了硬编码,以减少调试时的变量数量

import java.util.EnumMap;
import java.util.HashMap;
import java.util.Locale;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public enum UserStatusEnum {
    A,I,P;

    private static HashMap<LocaleEnum, EnumMap<UserStatusEnum, String>> userStatuses = new HashMap<LocaleEnum, EnumMap<UserStatusEnum, String>>();

    public static EnumMap<UserStatusEnum, String> getUserStatuses(LocaleEnum locale) {
        return userStatuses.get(locale);
    }

    // Pre-load the descriptive values. 
    static {
        String description = null;  
        ApplicationContext appCtx = new ClassPathXmlApplicationContext("spring-config.xml");

        for (LocaleEnum locale : LocaleEnum.values()) {

            EnumMap<UserStatusEnum, String> localeSpecificUserStatuses = new EnumMap<UserStatusEnum, String>(UserStatusEnum.class);
            for (UserStatusEnum status : UserStatusEnum.values()) {
                //description = appCtx.getMessage("user.status."+status, null, new Locale(locale.toString()));
                description = appCtx.getMessage("user.status.A", null, new Locale("en_us"));
                if (description != null) {
                    localeSpecificUserStatuses.put(status, description);
                }
                description=null;
            }
            userStatuses.put(locale, localeSpecificUserStatuses);
        }
    }
}
在这一行代码中:

description = appCtx.getMessage("user.status.A", null, new Locale("en_us"));
应用程序已在消息本地化文件中显示我的自定义应用程序错误消息,但在这种情况下,ApplicationContext已可用。因为我可以访问messages_en_us.property文件的内容,所以我假设我的配置是正确的。但是,获取消息内容的类由Spring实例化

枚举不是由Spring创建的,因此我的假设是,我在获取ApplicationContext句柄或如何使用它方面做了一些错误的事情

非常感谢您的帮助

多谢各位

编辑: 在调试模式下查看appCtx值后,我可以看到messageSource>basenames至少包含我的配置数据

[WEB-INF/locale/messages/messages, WEB-INF/locale/fields/fields, WEB-INF/locale/values/values]

尽管我在任何地方都看不到具有文件扩展名的整个文件名。

使用以下构造函数进行区域设置

public Locale(String language,
  String country)
例如:

description = appCtx.getMessage("user.status.A", null, new Locale("en","US"));

你不必在我们这里结束你的文件。默认为en_us。

感谢您的回复。我仍然在那条线上得到完全相同的错误。
public Locale(String language,
  String country)
description = appCtx.getMessage("user.status.A", null, new Locale("en","US"));