2011-11-21 66 views
0

我有一個Vaadin門戶至極支持「多國語言」,這意味着如果用戶在Liferay門戶選擇瞭如DE他會得到一些portlet的德語翻譯,如果他選擇另一種語言的portlet會翻譯成所選語言。還有一個問題,用戶可以翻譯portlet的只有一次,如果他選擇另一種語言時,portlet會保持以前的語言的翻譯字符串,和Portlet保持舊的語言,直到portlet的init方法重新加載。有沒有辦法動態地改變portlet組件的語言而不會丟失curret用戶的狀態(修改)?Vaadin portlet的動態語言變化

回答

0

沒有爲Vaadin組件轉換的模式可能適用在這裏:

  1. 創建一個實用的方法來翻譯Vaadin組件的標題和描述特性。使用ThreadLocal -pattern使看起來像一個靜態方法或使用依賴注入,使其更容易與其他地方調用它。
  2. 在翻譯方法中,將原始翻譯鍵(字符串ID)存儲到Component.setData()
  3. 在動態語言更改上調用該方法以使用Component.getData屬性重新轉換組件。您可以通過整個可見UI使用ComponentContainer接口從窗口開始輕鬆地重複。

將多個翻譯鍵存儲到數據屬性中(分別爲標題和說明)創建您自己的類或使用Map。

還要注意的是,如果你有數據來自數據庫,這種模式並沒有幫助,你必須解決一些其他的方式。