Window Builder Pro拡張機能のGoogleのハウツーに従って、アプリを国際化しました。ラベルに表示される文字列は、"Externalize Strings" ウィザードによって作成されたプロパティ ファイルに格納されるようになりました (私は従来の 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 に関するこの回答があります。
私はJavaでのGUIプログラミングが初めてなので、今何をすべきかよくわかりません。ここに私の質問があります:
- 新しい言語が設定されている場合、実行時にすべてのコントロールの言語を変更する最良の方法は何ですか?
- メソッドにテキスト プロパティを更新させるために、すべてのコントロールを App クラスのプライベート メンバーとして宣言しても問題ありませんか (->
updateLanguage
メソッドがそれを行います)。