自分の swing アプリケーションで、実行時に Locale を変更しようとしています。
しかし、それがどのように機能するのかわかりませんか、それともマスタープランがありませんか?
2 つの選択肢しか考え
られません。1. 最良のユーザー エクスペリエンスではなく、アプリケーションを再起動します。
2. コンポーネントを登録/登録解除できるローカリゼーション マネージャーを作成します。変更時には、すべてのコンポーネントを繰り返してテキストを変更するだけです。
1も2も気持ち悪い。
その他の情報:
現時点では向きはターゲットではありません。
アプリケーションは難読化されています。
例:
LocRes_en.properties:
text1 = 英語のテキスト
LocRes_ja.properties
text1 = 日本語テキスト
ChangeLocale.java:
java.awt.EventQueue をインポートします。
java.awt.FlowLayout をインポートします。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
java.util.Locale をインポートします。
java.util.ResourceBundle をインポートします。
import javax.swing.JButton;
javax.swing.JFrame をインポートします。
javax.swing.JLabel をインポートします。
パブリック クラス ChangeLocale {
プライベート JFrame フレーム。
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
試す {
ChangeLocale window = new ChangeLocale();
window.frame.setVisible(true);
キャッチ(例外e){
e.printStackTrace();
}
}
});
}
public ChangeLocale() {
初期化();
}
プライベートボイド初期化(){
フレーム = 新しい JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 5, 5);
frame.getContentPane().setLayout(flowLayout);
JButton btnChangeLoc = new JButton("ロケールの変更");
frame.getContentPane().add(btnChangeLoc);
final JLabel lblLabel1 = new JLabel("新しいラベル");
frame.getContentPane().add(lblLabel1);
Locale.setDefault(new Locale("en"));
ResourceBundle r = ResourceBundle.getBundle("LocRes");
lblLabel1.setText(r.getString("text1"));
btnChangeLoc.addActionListener(新しいActionListener() {
public void actionPerformed(ActionEvent e) {
Locale.setDefault(new Locale("ja"));
ResourceBundle r = ResourceBundle.getBundle("LocRes");
// すべてのコンポーネントを手動で繰り返します :(
lblLabel1.setText(r.getString("text1"));
///
}
});
}
}