2013-01-04 3 views
3

JOptionPane.showConfirmDialog과 관련하여 질문이 있습니다. 얻을 수있는 버튼은 Yes, NoCancel이지만이 세 버튼을 제 언어로 현지화 할 수 있는지 궁금합니다. 나는 내가 내 JButtons으로 내 자신의 확인 대화를 만들 수 있다는 것을 알았지 만 이것이 가능하면 궁금해하고있었습니다.JOptionPane Yes/No/Cancel 옵션을 현지화 할 수 있습니까?

미리 감사드립니다. 당신은 단지 한 번 설정해야

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

을 당신이 당신의 ResourceBundle에서 모든 메시지를 처리하는 싱글 톤 클래스가있는 경우 :

+0

시도'showOptionDialog'가 (HTTP [뿐만 아니라이 링크를 체크] : 그래서 안전을 위해,이 같은 UIManager 함께 자신의 패키지에 추가 자원을 이동하고 등록하는 것이 현명 할 수있다 : //stackoverflow.com/a/1399523/1233509) – scc

+0

이 기본적으로 실행되어야합니다. 로캘은 무엇입니까? – kleopatra

답변

9

간단한 방법은 다음과 같이, 원하는 로케일로 JOptionPane를 설정하는 것입니다 로케일 초기화에서. 예 :

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()); 
    } 
} 

건배!

+1

hmm ... 특별한 것은 필요하지 않습니다. 자동으로 작동해야합니다 - jdk가 지원하지 않는 exoctic 로케일을 제외하고 – kleopatra

+2

이것은 완벽하게 작동하며 가장 간단하고 가장 깨끗한 방법입니다. 한 줄로, 왜 이것이 받아 들여지지 않거나 가장 높은 투표를하지 않습니까? –

+1

동일한 프로젝트를 사용하여 OS에서 OS로 전환하고 두 컴퓨터의 기본 로캘이 다릅니다. Java가 시스템 로케일을 감지하고 해당 언어로'yes' /'no'를 표시하는 것 같지만 사용 된 글꼴이 다른 로켈 문자를 지원하지 않으면 성가신 것입니다. 이 답변에서 알 수 있듯이 로케일을 강제로 하나로 설정하면 작동합니다. 고마워! – FaithReaper

3

이 충분하다 :

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

+0

가장 간단한 솔루션입니다. –

1

, 스윙 PLAF 자원 번들로 제공되며, 당신이 그들을 찾을 수 있습니다 포함 독일어 가장 많이 사용되는 언어에 대한 표준 대화 상자에 대한 모든 지역화 된 메시지 JDK 소스. 예 : 영어 메시지 : http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/java/swing/plaf/windows/resources/windows.java

  • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/java/swing/plaf/gtk/resources/gtk.java
  • 문자열 값은 인접한 번들 파일에 의해 제공됩니다.

    드물게 사용되는 언어의 경우 원하는 언어에 대해 하나 이상의 파일을 만들고 클래스 패스의 아무 곳에 나 배치하여 이러한 패밀리에 번들을 하나 더 추가 할 수 있습니다. .java 및 .properties 형식의 번들은 .java 형식이 유니 코드와 약간 비슷하지만 좀 더 유니 코드 호환이 가능할 수도 있지만 ...

    com.sun 패키지에 내용을 직접 추가하는 것이 자바 라이센스.

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