【问题标题】:Internationalization in spring 3.1.2 using annotation not workingspring 3.1.2 中的国际化使用注释不起作用
【发布时间】:2012-07-24 05:45:47
【问题描述】:

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

这里我想为我使用 LocaleChangeInterceptorReloadableResourceBundleMessageSourceSessionLocaleResolver 类实现国际化。 这是我的配置类:

@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" /> 

作为“密码”。

请帮助我。 当我在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>

请帮我解决这个问题。

【问题讨论】:

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


    【解决方案1】:

    messageSource 的 bean 名称必须是“messageSource”,使用 @Configuration 您将其命名为 resourceBundleMessageSource。改成这样:

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

    【讨论】:

    • 嗨 Biju,我已将 bean 名称更改为“messageSource”,默认文本问题已解决,但我的拦截器无法正常工作。也就是说,当我单击链接以更改语言环境请求时,LocaleChangeInterceptor 没有拦截,那么 LocaleChangeInterceptor 是否也有任何特殊的 bean 名称?请帮忙..
    • 不,我认为您所做的对 LocaleChangeInterceptor 是正确的 - 您能否在 addInterceptors 方法中添加一个 @Override 以确保您在覆盖该方法时没有犯任何错误。
    • 太好了,成功了!有人可以指出这是写在哪里的文档吗?
    【解决方案2】:

    我解决了我的问题,我的 web.xml 中缺少初始化参数条目

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多