2013-08-19 98 views
1

這裏是我的地區配置如何獲取控制器中的當前語言?

<bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</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.CookieLocaleResolver"> 
    <property name="defaultLocale" value="en"/> 
</bean> 

<bean id="handlerMapping" 
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="interceptors"> 
     <ref bean="localeChangeInterceptor" /> 
    </property> 
</bean> 

當我嘗試調用的語言環境中使用控制器

@RequestMapping(value = "customers/customer-{idCustomer:[0-9]+}/detail", method = RequestMethod.GET) 
public ModelAndView detail(Map<String, Object> map, @PathVariable Integer idCustomer, Locale locale) { 
    logger.info(locale.toString()); 
    logger.info(request.getLocale().toString()); 
    ... 
} 

它返回的值不同。但是當我使用URL ?lang=en中的GET參數在網站上切換語言時,它在所提及的控制器調用中不會改變任何內容。 i18n工作正常,它從正確的文件加載標籤。但我想在我的控制器中獲得改變的語言。我想在打開的頁面上單獨獲取選擇的語言(URL中有/無請求參數lang)。

+0

'lang = en'只是一個請求參數。使用'@ RequestParam'。 –

+0

是的,但如果沒有這個請求參數,變量'lang'將不可用。 – misco

回答

3

您可以使用Spring爲此提供的類LocaleContextHolder。從技術文檔:

用作中央持有者當前區域在Spring,無論 必要的:例如,在MessageSourceAccessor。 DispatcherServlet 會在此處自動公開其當前區域設置。其他應用程序也可以將它們公開,以使像MessageSourceAccessor 這樣的類自動使用該Locale。

然後在你的控制器只要致電:

LocaleContextHolder.getLocale(); 

檢索使用Spring的語言環境。

LocaleContextHolder.getLocale() javadoc。

相關問題