使用注释不起作用的春季3.1.2国际化

时间:2012-07-24 05:45:48

标签: spring java-ee spring-mvc configuration-files

我正在使用spring 3.1.2 MVC。 我正在尝试通过注释配置Web应用程序

在这里,我想实现国际化,因为我正在使用 LocaleChangeInterceptor ReloadableResourceBundleMessageSource SessionLocaleResolver 类。 这是我的配置类:

@Configuration
@EnableWebMvc 
public class MyAppConfig extends WebMvcConfigurerAdapter{

@Bean
public ReloadableResourceBundleMessageSource resourceBundleMessageSource(){
        ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
        String[] resources= {"classpath:labels","classpath:message"};
        messageSource.setBasenames(resources);
        return messageSource;
    }

@Bean 
public LocaleChangeInterceptor localeChangeInterceptor(){
    LocaleChangeInterceptor localeChangeInterceptor=new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("locale");
    return localeChangeInterceptor;
}

@Bean
public SessionLocaleResolver sessionLocaleResolver(){
    SessionLocaleResolver localeResolver=new SessionLocaleResolver();
    localeResolver.setDefaultLocale(new Locale("da","DK"));
    return localeResolver;
}   

public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

}

但是这不起作用它显示

的默认文本
<spring:message code="login.user.password" text="Password" /> 

as“密码”。

请帮帮我。 我在applicationContext.xml中进行以下配置时的工作正常。

 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">


 <property name="basenames">
    <list>
        <value>classpath:message</value>
        <value>classpath:labels</value>            
    </list>
</property>     
<property name="defaultEncoding" value="ISO-8859-1" />
</bean>

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="locale"/>
</mvc:interceptors>


<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="da_DK" />
</bean>

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

messageSource的bean名称必须是“messageSource”,使用@Configuration将其作为resourceBundleMessageSource。将其更改为:

    @Bean
    public ReloadableResourceBundleMessageSource messageSource(){
        ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
        String[] resources= {"classpath:labels","classpath:message"};
        messageSource.setBasenames(resources);
        return messageSource;
    }

答案 1 :(得分:2)

我解决了我的问题,我在web.xml中缺少init param条目

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            com.config.AppConfig
        </param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

添加此条目后,带有注释的配置工作正常。 :)