我已经按照Google 的 Window Builder Pro 扩展的方法来国际化我的应用程序。将在标签中显示的字符串现在存储在由“外部化字符串”向导创建的属性文件中(我使用了经典的 eclipse 消息文件)。
在我的initialize
方法中,我所有的标签都被初始化,它们的文本设置如下:
JLabel lblLanguage = new JLabel(Messages.getString("App.lblLanguage.text")); //$NON-NLS-1$
我在我的类App
中创建了一个包含 GUI 的枚举类型:
private enum Lang { German(Locale.GERMAN), English(Locale.ENGLISH);
private Locale loc;
Lang (Locale l) {
loc = l;
}
Locale getLocale() {
return loc;
}
}
语言将使用一个组合框设置,该组合框使用枚举类型 Lang 来显示可用的语言:
JComboBox cboLanguage = new JComboBox();
cboLanguage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
Lang l = (Lang)cb.getSelectedItem();
// TODO: update language
}
});
cboLanguage.setModel(new DefaultComboBoxModel(Lang.values()));
我发现了许多其他关于 Swing 应用程序国际化的方法和教程,但没有一个涵盖如何更新所有标签(以及可能的其他带有文本的控件)。如果链接没有死,那么这里有这个答案可能会有所帮助。
因为我对java中的GUI编程有点陌生,所以我现在真的不知道该怎么做,这是我的问题:
- 如果设置了新语言,那么在运行时更改所有控件的语言的最佳方法是什么?
- 是否可以(推荐)将所有控件声明为我的 App 类的私有成员以让方法更新其文本属性(->
updateLanguage
方法可以这样做)