Spring Java 配置中的 Mvc 消息包
Spring Mvc Message Bundle in Java configuration
我用的是spring5.1.5。我使用 Java 配置,但消息包不起作用。
- 当我在 xml 中编写它时,一旦将配置转移到 Java,一切都会正常工作,消息 No message found under code 'jsp.header.entry' for locale 'ru'出现了
- 在 xml 配置中我可以设置
fileEncodings("UTF-8")
但在 Java 配置中我不知道如何设置
一个很大的帮助请求。谢谢。
是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/locales/message"/>
<property name="useCodeAsDefaultMessage" value="false"/>
<property name="fileEncodings" value="UTF-8"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="cacheSeconds" value="-1"/>
</bean>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ru"/>
</bean>
</beans>
变成了
@Configuration
@EnableWebMvc
@ComponentScan({"com.seeds.controllers", "com.seeds.validators"})
public class WebConfig implements WebMvcConfigurer {
//Message Source config
@Bean
public ReloadableResourceBundleMessageSource getMessageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/locales/message");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(-1);
return messageSource;
}
@Bean
public LocaleChangeInterceptor getLocaleChangeInterceptor(){
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Bean
public SessionLocaleResolver getLocaleResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(new Locale("ru"));
return localeResolver;
}
//others
您仍然可以在 Java 配置中设置文件编码。
messageSource.setFileEncodings(new Properties() {{ put("YourFileName.ru", "your-encoding"); }});
如果在 fileEncodings
字段中未找到特定编码,则使用 defaultEncoding
。
由于您没有为文件使用特定编码,因此使用默认 "UTF-8" 编码。
您的 Java 配置在编码方面很好。但是您实现了 WebMvcConfigurer
,因此您需要覆盖 addInterceptors
方法,因为您的 LocaleChangeInterceptor
将被添加到 InterceptorRegistry
。请尝试:
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
registry.addInterceptor(localeChangeInterceptor);
}
MessageSource
和 LocaleResolver
都按名称查找,分别是 messageSource
和 localeResolver
。
使用基于 Java 的配置时 the name of the method is used as the name of the bean。正如您将它们命名为 getMessageSource
和 getLocaleResolver
所需的 beans 未找到并因此被忽略。
要修复,请将名称分别更改为 messageSource
和 localeResolver
。
@Configuration
@EnableWebMvc
@ComponentScan({"com.seeds.controllers", "com.seeds.validators"})
public class WebConfig implements WebMvcConfigurer {
//Message Source config
@Bean
public ReloadableResourceBundleMessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/locales/message");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(-1);
return messageSource;
}
@Bean
public SessionLocaleResolver localeResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(new Locale("ru"));
return localeResolver;
}
我用的是spring5.1.5。我使用 Java 配置,但消息包不起作用。
- 当我在 xml 中编写它时,一旦将配置转移到 Java,一切都会正常工作,消息 No message found under code 'jsp.header.entry' for locale 'ru'出现了
- 在 xml 配置中我可以设置
fileEncodings("UTF-8")
但在 Java 配置中我不知道如何设置
一个很大的帮助请求。谢谢。
是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/locales/message"/>
<property name="useCodeAsDefaultMessage" value="false"/>
<property name="fileEncodings" value="UTF-8"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="cacheSeconds" value="-1"/>
</bean>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ru"/>
</bean>
</beans>
变成了
@Configuration
@EnableWebMvc
@ComponentScan({"com.seeds.controllers", "com.seeds.validators"})
public class WebConfig implements WebMvcConfigurer {
//Message Source config
@Bean
public ReloadableResourceBundleMessageSource getMessageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/locales/message");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(-1);
return messageSource;
}
@Bean
public LocaleChangeInterceptor getLocaleChangeInterceptor(){
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Bean
public SessionLocaleResolver getLocaleResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(new Locale("ru"));
return localeResolver;
}
//others
您仍然可以在 Java 配置中设置文件编码。
messageSource.setFileEncodings(new Properties() {{ put("YourFileName.ru", "your-encoding"); }});
如果在 fileEncodings
字段中未找到特定编码,则使用 defaultEncoding
。
由于您没有为文件使用特定编码,因此使用默认 "UTF-8" 编码。
您的 Java 配置在编码方面很好。但是您实现了 WebMvcConfigurer
,因此您需要覆盖 addInterceptors
方法,因为您的 LocaleChangeInterceptor
将被添加到 InterceptorRegistry
。请尝试:
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
registry.addInterceptor(localeChangeInterceptor);
}
MessageSource
和 LocaleResolver
都按名称查找,分别是 messageSource
和 localeResolver
。
使用基于 Java 的配置时 the name of the method is used as the name of the bean。正如您将它们命名为 getMessageSource
和 getLocaleResolver
所需的 beans 未找到并因此被忽略。
要修复,请将名称分别更改为 messageSource
和 localeResolver
。
@Configuration
@EnableWebMvc
@ComponentScan({"com.seeds.controllers", "com.seeds.validators"})
public class WebConfig implements WebMvcConfigurer {
//Message Source config
@Bean
public ReloadableResourceBundleMessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/locales/message");
messageSource.setUseCodeAsDefaultMessage(false);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(-1);
return messageSource;
}
@Bean
public SessionLocaleResolver localeResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(new Locale("ru"));
return localeResolver;
}