2011-06-19 33 views
1

我有一个SWT应用程序,目前相当复杂。我想让应用程序能够在不重新启动的情况下切换界面语言。什么是最好的方式来做到这一点?swt无缝语言更改

回答

2

Control API(这是所有SWT组件的超类)有一个方法重绘(),其中,我认为,要求再次创造内容的方法和提供你正在寻找的结果。

编辑:我只是通过制作一个按钮并在每次推后将它的文本设置为一个随机数字来测试它,它没有任何美学副作用。

+0

因此,每个组件都必须具有某种类型的侦听器,在重绘过程​​中被调用? – bvk256

+0

您只需要在应该更改语言的组件上有一个侦听器。当该监听器被触发时,只要组件是最终的,就可以在窗口中设置其他组件的文本(或任何其他特征)。 –

+0

更改每个组件的特性后,只需在每个组件上调用redraw()方法即可无缝更改。 –

0

有典型的三个部分的解决方案:

  • 语言文件
  • 用于控制
  • 动态文本静态文本。

语言文件只是普通的Java属性文件 - 请参阅java.text包。当你改变语言时,你只需打开一个新的语言环境。

控件的静态文本 - 例如按钮和标签 - 通常通过将一个关键字与每个应该能够改变语言的控件关联来处理。当你想改变语言时,你递归地浏览控件,在当前语言环境中查找新文本并设置新值...

动态文本是...其他所有...这通常被处理通过使用格式字符串 - 请参阅String.format(...) - 再次从当前语言环境中检索。

因为还有其他的东西可能依赖于当前的语言 - 例如,图标,图像,媒体剪辑等...