2014-02-14 40 views
1

我知道使用添加?lang = en(fr,de,ch)本地化java spring應用程序的標準方法,但它僅本地化一個頁面,而不是移動到其他頁面後按任何href =「/ newpage」),那裏再次默認語言環境,而不是之前選擇。我的問題是:如何在登錄頁面(或索引頁面)用戶區域設置確定並將其設置爲整個Web應用程序的默認區域設置?如何本地化整個java彈簧應用程序

更新問題14.02.2014-16:32 添加信息。

本地化的默認春天實現它添加「?lang = en」來請求URI並從bundle中獲取新消息。因此有一個示例: 默認語言環境設置爲en uri:http://example.com/index - en語​​言環境。 uri:http://example.com/index?lang=de - 德語語言環境設置 - 頁面翻譯爲德語。 但比,我點擊鏈接,其中得到href =「/ profile」。當我點擊: uri:http://example.com/profile - 我得到了默認的語言環境 - en。

我想要的: uri:http://example.com/index - 用戶按下站點頂部的德國國旗,比某些bean獲得此操作並設置默認語言環境 - 德語。比所有頁面將加載默認的德語區域設置。 uri:http://example.com/profile - 默認語言環境 - 德語。

在URI請求的例子,我想這樣的事情: example.com - 檢測用戶的語言環境 - 設置默認的語言環境,德國對英國國旗的例子/ 用戶按 - 默認的區域設置爲英語的所有網頁。

更新問題14.02.2014-17:38 補充信息。關於我的錯誤的信息 一切都很好。我標記了正確的答案。 Spring標準實現非常好,正是我想要的。我在沒有完整翻譯的JSP頁面中出現錯誤,並且當我更改語言環境時,雖然並非所有內容都翻譯完了,但它是。謝謝!

回答

3

Spring文檔是非常好這一主題:17.8 Using locales 你需要兩樣東西:

  • 一個LocalResolver - 這是保持本地的一個用戶,當用戶發送的請求時,它添加本地(通過RequestContext.getLocale()) - 通常SessionLocalResolverCookieLocaleResolver用於一個正常的網頁應用程序 - 它是重要的是,豆ID /名稱是localeResolverDispatcherServlet.LOCALE_RESOLVER_BEAN_NAME="localeResolver") - (如果名稱不同,然後DispatcherServlet不會找到本地解析器!
  • A LocaleChangeInterceptor當用戶將?lang=de添加到其請求時更改區域設置。

示例配置

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

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

對於您的問題,很可能是一些與LocalResolver是錯誤的,也許你只是忘記它的ID /名稱*設置爲localeResolver或者您使用AcceptHeaderLocaleResolver(總是「回落」的請求頭區域)

*參見this answer的標識和名稱之間的區別

+0

我添加了一些關於我的問題的信息 – dikkini

相關問題