Java 在区域设置“en_us”的代码“user.status.A”下未找到消息
我试图为不同类型的消息、用户消息、字段标签/按钮、数据值维护单独的文件。在这次尝试中,我试图获得不同数据值的描述。例如,UserStatus a可能显示为Active或ActivoJava 在区域设置“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
<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"));