2011-11-21 32 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。

还要注意的是,如果你有数据来自数据库,这种模式并没有帮助,你必须解决一些其他的方式。