自分の 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")); /// } }); } }