WindowBuilder:在运行时更改语言

时间:2013-02-06 12:50:06

标签: java localization internationalization resourcebundle windowbuilder

所以我有这个Java项目(带有JInternalFrames的JDesktopPane)和WindowBuilder,现在我要翻译整个程序。每次从JDesktopPane菜单打开JInternalFrame时,都会实例化一个新的JInternalFrame。

任务:用户应该能够在运行时在各种语言之间切换(语言不能直接更改,重新打开JInternalFrame就足够了。现在我在每个JInternalFrame中使用ResourceBundle:

private static ResourceBundle BUNDLE;

设置文字:

lblText = new JLabel(BUNDLE.getString("TestWindow.lblText.text")); //$NON-NLS-1$

为了在语言之间切换,我在JDesktopPane中有一个菜单,例如

language = "en";

创建新窗口后,JInternalFrame获取对MainWindow的引用并读取此属性并将其设置在JInternalFrame中:

BUNDLE = ResourceBundle.getBundle("TestWindow.messages_"+ mainWindow.language); //$NON-NLS-1$

问题:WindowBuilder会干扰它并设置

private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("TestWindow.messages"); //$NON-NLS-1$

每次我在设计视图中打开窗口。此外,我在WindowBuilder的编辑器错误窗口中收到大量错误,这是因为编辑器无法解析"TestWindow.messages_"+ mainWindow.language,这对我来说很清楚。

有没有办法以更正确的方式处理这个问题?我无法在WindowBuilder中找到正确的东西,所以我想出了这个hacky解决方案。

谢谢, 王-AL

1 个答案:

答案 0 :(得分:0)

岂不

Locale.setDefault(new Locale("en")); // Locale.ENGLISH

足够吗?只需获取根包即可获得正确的语言环境包。