Vaadin portlet动态语言改变

时间:2011-11-21 07:37:06

标签: java portlet vaadin

我有一个支持“多语言”的Vaadin portlet,这意味着如果用户在liferay门户中选择例如DE,他将获得一些portlet的德语翻译,如果他选择另一种语言,则portlet将被翻译成所选语言。有一个问题,用户只能翻译一次portlet,如果他选择另一种语言,portlet会保留以前语言的翻译字符串,并且portlet会保留旧语言,直到重新加载portlet init方法。有没有办法动态地更改portlet组件的语言而不会丢失当前用户状态(修改)?

1 个答案:

答案 0 :(得分:0)

Vaadin组件翻译的模式可能适用于此处:

  1. 创建一个实用程序方法来转换Vaadin Component的标题和描述属性。使用ThreadLocal - pattern使其看起来像一个静态方法或使用依赖注入,以便更容易从任何地方调用它。
  2. 在翻译方法中,将原始翻译密钥(字符串id)存储到Component.setData()
  3. 在动态语言更改时,调用方法以使用Component.getData属性重新转换组件。您可以使用从Window开始的ComponentContainer界面轻松遍历整个可见UI。
  4. 用于将多个翻译键存储到data-property中(分别用于标题和说明)创建自己的类或使用Map。

    另请注意,如果您拥有来自数据库的数据,则此模式无效,您必须以其他方式解决此问题。