2

かなり大きな Swing アプリケーションを国際化しています。すべてのResourceBundle作業を完了し、次に右から左の向きを試しました。

コマンド ラインから (JVM 引数を介して) Locale を設定するだけで、インスタンス化されたすべてのコンポーネントに反映されると予想していましたが、そうではないようです。デフォルトの Locale は正しい (iw_IL私のテスト ケースでは) ですが、GridBag などのレイアウトはデフォルトを尊重しません。

メインメソッドでデフォルトを明示的に設定してapplyComponentOrientationから、親の JFrame にも使用しようとしましたが、これも機能しません。特定の JPanel への適用は機能しますが (GridBag レイアウトの場合)、これは ComboBox などの子コンポーネントには影響しません。

public class TestI18N extends JFrame {

TestI18N() {
    super("Test I18N");
    //test 1 - set orientation at instantiation, this just affects the border layout not the menu or combos
    applyComponentOrientation(ComponentOrientation.getOrientation(Locale.getDefault()));
    JComponent comp = (JComponent)getContentPane();
    setJMenuBar(getTestMenuBar());
    comp.setLayout(new BorderLayout());
    JComboBox<String> box1 = new JComboBox<String>(new DefaultComboBoxModel<String>(new String[] {"one", "two", "three"}));
    comp.add(box1, BorderLayout.LINE_START);
    JComboBox<String> box2 = new JComboBox<String>(new DefaultComboBoxModel<String>(new String[] {"uno", "dos", "tres"}));
    comp.add(box2, BorderLayout.LINE_END);
    //test 2 - this orients the menu and combo box arrows
    //but the renderers are still LTR
    applyComponentOrientation(ComponentOrientation.getOrientation(Locale.getDefault()));
}

private JMenuBar getTestMenuBar() {
    JMenuBar bar = new JMenuBar();
    bar.add(new JMenuItem("Menu item"));
    return bar;
}

public static void main(String[] args) {
    Locale locale = new Locale("iw", "IL");
    Locale.setDefault(locale);
    System.out.println("default locale="+Locale.getDefault());
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            TestI18N me = new TestI18N();
            me.pack();
            me.setVisible(true);
        }
    });
}
}

「apply」の呼び出しがなければ、すべて正常です (デフォルトのロケールが RTL であるにもかかわらず)。最初の「適用」だけを使用すると、uno ボックスは左側にありますが、メニューとコンボは正常です。2 番目の「適用」を使用すると、メニュー RTL が表示され、コンボ矢印が左側に表示されますが、データは依然として左揃えになっています。では、レンダラーを変更する必要があると思いますか?

これはそれが機能するはずの方法ですか?イスラエルの Windows ボックスで実行していた場合でも、これらすべてを実行する必要がありますか?

ありがとう

4

0 に答える 0