簡體   English   中英

Java配置中的Spring Mvc Message Bundle

[英]Spring Mvc Message Bundle in Java configuration

我使用spring 5.1.5。 我使用Java配置,消息束不起作用。

  1. 當我用xml編寫它時,將配置轉移到Java后一切正常,出現了消息“在語言'ru'的代碼'jsp.header.entry'下找不到消息”
  2. 在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);
  }

MessageSourceLocaleResolver均按名稱查找,分別是messageSourcelocaleResolver

使用基於Java的配置時,將方法的名稱用作bean的名稱 正如您將它們命名為getMessageSourcegetLocaleResolver ,找不到所需的bean,因此將其忽略。

要解決此問題,請將名稱分別更改為messageSourcelocaleResolver

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM