Как интернационализировать ускоритель JMenuItem?

#java #swing #locale

#java #swing #locale

Вопрос:

Я использую jdk 1.6 и хотел бы интернационализировать ускоритель моего пункта меню. язык по умолчанию — французский, и я хочу перевести на английский. Я использую приведенный ниже код :

 JMenuItem deleteMenuItem = new JMenuItem("delete");
deleteMenuItem.setLocale(Locale.ENGLISH);
deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
  

но мой ускоритель всегда на французском.
Как я могу это решить?
Заранее спасибо.

Ответ №1:

Вы должны установить locale по умолчанию для вашего приложения. Тогда это будет работать.

 Locale.setDefault(Locale.ENGLISH);
  

Комментарии:

1. Попробуйте выполнить setDefaultLocale() вызов до построения фрейма. В лучшем случае прямо в вашем main() методе

Ответ №2:

Для интернационализации ускорителя на английский вам нужно вызвать Locale.setDefault(Locale.ENGLISH) перед созданием экземпляра нового JFrame. Ниже приведен пример, в котором я меняю французский язык в ускорителе.Язык моей машины — английский.

   public static void main(String[] args) {
    Locale.setDefault(Locale.FRANCE);

    JFrame frame = new JFrame("MenuSample Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();

    JMenu fileMenu = new JMenu("File");
    fileMenu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(fileMenu);

    JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);
    fileMenu.add(newMenuItem);


    JMenuItem cutMenuItem = new JMenuItem("Cut", KeyEvent.VK_T);

    KeyStroke ctrlXKeyStroke = KeyStroke
            .getKeyStroke(KeyEvent.VK_CUT, 0);

    cutMenuItem.setAccelerator(ctrlXKeyStroke);

    fileMenu.add(cutMenuItem);

    frame.setJMenuBar(menuBar);
    frame.setSize(350, 250);
    frame.setVisible(true);
}
  

Результат таков

введите описание изображения здесь

Комментарии:

1. спасибо @Sai Ye Yan Naing, да, я написал «удалить», потому что я хотел быть явным, это просто для вопроса, в моем реальном коде я использую ResourceBundle. Проблема, с которой я сталкиваюсь, заключается в переводе ускорителя моего пункта меню.