[英]Spring Mvc Message Bundle in Java configuration
我使用spring 5.1.5。 我使用Java配置,消息束不起作用。
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的配置時,將方法的名稱用作bean的名稱 。 正如您將它們命名為getMessageSource
和getLocaleResolver
,找不到所需的bean,因此將其忽略。
要解決此問題,請將名稱分別更改為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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.