2016-08-06 50 views
1

我有一個傳統的Spring4/Thymeleaf國際化應用 我與經典彈簧及Thymeleaf:改變語言環境和停留在當前頁面

org.springframework.web.servlet.i18n.LocaleChangeInterceptor 

org.springframework.web.servlet.i18n.CookieLocaleResolver 

當切換我輕鬆切換語言環境總是發送到服務器/home?lang = fr。它工作正常。但我需要一個更復雜的行爲。 我需要做的是在切換語言環境時保留當前頁面

我發現這個thymeleaf片斷半工作解決方案:

th:with="currentUrl=(${#httpServletRequest.pathInfo + '?' + #strings.defaultString(#httpServletRequest.queryString, '')}) 

的問題是我需要實現我自己許多其他的情況:

  • 時已經有任何查詢參數
  • 如果有lang = en param,

是否有人知道如何與本地 Spring或Thymeleaf工具來管理這種情況?或者我需要爲Thymeleaf編寫我自己的處理器?

+0

你有你在哪裏檢驗一個示例應用程序這個功能出來了?很高興能夠對已經安裝的項目進行嘗試並找到解決方案。我猜你的語言選擇器顯示爲每頁上的頁眉或頁腳。我會設置一些攔截器,它爲包含當前頁面的URL的模型添加一個值。然後該模板只負責輸出這些語言特定的網頁。 –

回答

0

我在我的項目中使用這個&它工作正常。當語言環境發生變化時,我沒有專門重定向到任何URL。

@Bean 
public LocaleResolver localeResolver() 
{ 
    Locale defaultLocale = new Locale(env.getProperty(Constants.DEFAULT_LOCALE)); 
    CookieLocaleResolver clr = new CookieLocaleResolver(); 
    clr.setDefaultLocale(defaultLocale); 
    return clr; 
} 

@Bean 
public LocaleChangeInterceptor localeChangeInterceptor() 
{ 
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 
    lci.setParamName("lang"); 
    return lci; 
} 
+0

當語言環境更改時,用戶應該保持在同一頁面上。你的代碼不合適。 – Yev

+0

你打算如何改變語言環境?是不是使用'lang'查詢參數? – nmy

+0

我正在使用經典方法,就像你做的一樣,但我的問題是如何動態生成當前頁面鏈接與lang param。 – Yev

1

最簡單的解決方案是連接「requestURI」和「queryString」。 該方法的缺點是,如果您在同一鏈接上單擊多次,參數會一次又一次地被添加。

一種解決方法是編寫一個函數添加參數

有關代碼示例之前「清理」鏈接,來看看這個問題:Thymeleaf: add parameter to current url

+0

謝謝你的魅力。只有一個精度 - 遺忘了**。build()。**函數在引用的ServletUriComponentsBuilder.fromCurrentRequest()中調用。replaceQueryParam(param).build()。toUriString(); – Yev

+0

@Yev,沒有build()方法調用丟失,因爲根據文檔:[toUriString()](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder。html#toUriString--)'是一個快捷方法,它結合了對build()的調用,然後是UriComponents.encode(),最後是UriComponents.toUriString()。' –

相關問題