2012-07-24 94 views
2

我使用spring 3.1.2 MVC。 我想通過配置註釋春季國際化3.1.2使用註釋不起作用

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> 

請幫我解決這個問題。

回答

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> 

缺少初始參數項此項添加我的註釋的配置工作正常後。 :)

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; 
    } 
+0

嗨Biju,我已經改變了bean名稱爲「messageSource」,並且默認文本問題已解決,但我的攔截器不工作。也就是當我點擊鏈接來更改語言環境請求不會被** LocaleChangeInterceptor **攔截,那麼是否還有任何特殊的Bean名稱用於** LocaleChangeInterceptor **呢?請幫忙.. – swapy 2012-07-25 04:13:31

+0

不,我認爲你所做的對於LocaleChangeInterceptor來說是正確的 - 你可以添加一個@Override到addInterceptors方法,以確保你在重寫方法時沒有犯任何錯誤。 – 2012-07-25 19:08:12

+0

太棒了,它的工作!有人可以指出文檔寫在哪裏嗎? – 2016-04-28 23:18:59