一般来说,出现此类问题不是因为区域设置不存在,而是因为
MessageBundle
配置不正确。在您的情况下,您似乎需要删除基本名称中的“/”。
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
p:basename="/WEB-INF/messages" />
为什么会这样:
如果您有
messages.properties
和 messages_en.properties
捆绑包,则捆绑包名称为 messages
。如果它们位于 WEB-INF
文件夹中,则基本名称为 /WEB-INF/messages
,即根据 /path/to/bundle/bundlename
。如果 messages.properties
文件夹中有 /WEB-INF/messages
,则相应的基本名称为 /WEB-INF/messages/messages
。
对于 Spring Boot,你需要这样的东西:
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/classes/messages");
return messageSource;
}
对于 Spring Boot 文件夹资源,您需要添加 Bean 的名称:
@Bean(name="messageSource")
public ResourceBundleMessageSource bundleMessageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
你也可以在 Spring boot application.properties 中指定
# INTERNATIONALIZATION
spring.messages.basename=i18n/messages
spring.messages.encoding=UTF-8
您可以在application.properties中添加一些代码:
spring.messages.always-use-message-format=false
spring.messages.basename=messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8
spring.messages.fallback-to-system-locale=true
也许会对某人有所帮助。
errors.rejectValue("fieldName", "errorCode", "textException");
如果你不像我一样使用 messageResource 那么你应该写“”而不是“errorCode”。
示例:
errors.rejectValue("name", "", "This field should not be empty");
这种方式帮助我避免了异常。
对于 Maven/Spring 项目,将消息源基本名称设置为“classpath:messages”,并将 messages*.properties 文件放在 src\main\java 中 资源。字符串“classpath:”是硬编码的,可能意味着在应用程序的 java 类的根目录中搜索。
默认情况下,maven 假设在
下找到此类资源包消息源src/main/资源
。通过将所有必要的文件夹移动到该位置下,并确保上下文中有以下代码
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"><value>messages</value></property>
</bean>