Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java swt无缝语言更改_Java_Localization_Swt - Fatal编程技术网

Java swt无缝语言更改

Java swt无缝语言更改,java,localization,swt,Java,Localization,Swt,我有一个SWT应用程序,目前非常复杂。我想让应用程序能够在不重启的情况下切换界面语言。最好的方法是什么 The(它是所有SWT组件的超类)有一个方法redraw(),我假设它再次调用create contents方法,并且应该提供您要查找的结果 编辑:我只是通过制作一个按钮并在每次按下后将其文本设置为一个随机数来测试这一点,它的工作没有任何美学上的副作用。解决方案有三个典型部分: 语言文件 控件的静态文本 动态文本 语言文件只是普通的Java属性文件-请参阅Java.text包。当您更改语言

我有一个SWT应用程序,目前非常复杂。我想让应用程序能够在不重启的情况下切换界面语言。最好的方法是什么

The(它是所有SWT组件的超类)有一个方法redraw(),我假设它再次调用create contents方法,并且应该提供您要查找的结果


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

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

  • 语言文件
  • 控件的静态文本
  • 动态文本
语言文件只是普通的Java属性文件-请参阅
Java.text
包。当您更改语言时,您“只是”打开一个新的区域设置

控件(例如按钮和标签)的静态文本通常通过将键关联到每个应该能够更改语言的控件来处理。当您想要更改语言时,可以递归地遍历控件,在当前区域设置中查找新文本并设置新值

动态文本是。。。其他一切。。。这通常通过使用格式字符串来处理-请参阅string.format(…)-再次从当前区域设置中检索


当然,还有其他可能依赖于当前语言的东西,例如图标、图像、媒体剪辑等……

因此每个组件都必须有某种类型的侦听器,在重画期间调用这些侦听器?您只需要在应该更改语言的组件上有一个侦听器。当该侦听器被触发时,只要组件是最终的,您就可以在窗口中设置其他组件的文本(或任何其他特征)。更改每个组件的特征后,只需对每个组件调用redraw()方法,它们就会无缝更改。