Могу ли я локализовать параметр JOptionPane Yes/No/Cancel?

У меня есть вопрос относительно JOptionPane.showConfirmDialog. Я получаю кнопки Yes, No и Cancel, но мне было интересно, можно ли локализовать эти три кнопки на моем языке? Я понимаю, что могу создать собственный диалог подтверждения с моим JButtons, но мне было интересно, возможно ли это также.

Спасибо заранее.

3 ответа

Простым способом является установка JOptionPane с желаемой локалью, например:

Locale locale = new Locale("pt","BR");
JOptionPane.setDefaultLocale(locale);

Если у вас есть одноэлементный класс, который обрабатывает все сообщения из вашего ResourceBundle, вам просто нужно установить его один раз в инициализации локали. Например:

public void setLocale(Locale locale) {
 if (_bundle == null || !locale.equals(_locale)) {
 _locale = locale;
 _bundle = ResourceBundle.getBundle("resources.i18n.MessagesBundle", locale);
 JOptionPane.setDefaultLocale(_locale);
 _logger.info("Got new resource bundle for language-country: " + _locale.getLanguage() + "-" +
 locale.getCountry());
 }
}

Ура!


Этого достаточно:

UIManager.put("OptionPane.yesButtonText", "Ya");

и т.д.


Все локализованные сообщения для стандартных диалогов для большинства используемых языков, включая немецкий, предоставляются пакетами ресурсов Swing PLAF, и их можно найти в источниках JDK. См. для сообщений на английском языке:

Значения строк для языков, отличных от английского, предоставляются смежными файлами связок.

И в случае редко используемого языка вы можете добавить еще один пакет в любое из этих семейств, просто создав еще один файл для нужного языка и разместив его в любом месте вашего пути к классам. Связки в формате .java и .properties работают одинаково хорошо, хотя формат .java может быть немного более удобным для Unicode...

Может быть полезно иметь в виду, что прямое добавление содержимого в пакет com.sun может нарушить лицензию Java. Чтобы быть в безопасности, может быть разумным переместить ваши дополнительные ресурсы в собственный пакет и зарегистрировать его с помощью UIManager следующим образом:

UIManager.getDefaults().addResourceBundle("mypackage.swing.plaf.basic.resources.basic");

licensed under cc by-sa 3.0 with attribution.