我已经按照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应用国际化的教程和指南,但是没有一个涵盖如何更新所有标签(以及可能包含文本的其他控件)。这里在SO上有this answer一篇文章,如果链接不死的话可能会有帮助。
因为我对Java中的GUI编程还比较新,所以我现在不太知道该怎么做,以下是我的问题:
- 如果设置了新语言,更改运行时所有控件的语言的最佳方法是什么?
- 是否可以(推荐)将所有控件声明为我的App类的私有成员,以便有一个方法来更新它们的文本属性(->一个
updateLanguage
方法将执行此操作)?