JavaTM Platform
Standard Ed. 6

java.util
클래스 ResourceBundle

java.lang.Object 
  상위를 확장 java.util.ResourceBundle
직계의 기존의 서브 클래스:
ListResourceBundle , PropertyResourceBundle


public abstract class ResourceBundle
extends Object

자원 번들에는, 로케일 고유의 객체가 포함되어 있습니다. 프로그램으로 String 등의 로케일 고유의 자원이 필요한 때는, 사용자의 로케일에 맞은 자원 번들로부터 로드할 수 있습니다. 이와 같이, 자원 번들로부터, 로케일 고유의 정보의 모두가 아니어도 그 대부분을 떼어내는 것으로, 사용자의 로케일에는 거의 의존하지 않는 프로그램 코드를 쓸 수가 있습니다.

이것에 의해, 이하의 특징을 가지는 프로그램을 쓰는 것이 가능하게 됩니다.

자원 번들은 패밀리에 속하고 있습니다. 그 패밀리에서는, 멤버는 공통의 기저명을 공유하고 있습니다만, 패밀리명에는 로케일을 식별하는 추가 컴퍼넌트도 포함되어 있습니다. 예를 들어, 자원 번들의 패밀리의 기저명은 「MyResources」입니다. 패밀리는, 패밀리와 같은 이름 (MyResources)으로, 특정의 로케일이 지원되지 않는 경우는, 마지막 수단의 번들로서 사용되는, 디폴트의 리소스반톨을 가질 필요가 있습니다. 또, 패밀리는, 필요한 만큼의 수의 로케일 고유의 멤버를 제공할 수가 있습니다. 예를 들어, 「MyResources_de」라고 이름이 붙여진 독일의 멤버 등입니다.

패밀리의 각 자원 번들에는 같은 항목이 있습니다만, 이러한 항목은 해당 자원 번들에 의해 나타내지는 로케일에 맞추어 번역되고 있습니다. 예를 들어, 「MyResources」와「MyResources_de」의 양쪽 모두에, 조작을 취소하기 위한 버튼으로 사용되는 String 가 있다고 합니다. 그 String 에, 「MyResources」에서는 「Cancel」를 포함해, 「MyResources_de」에서는 「Abbrechen」를 포함할 수가 있습니다.

같은 언어를 사용하는 로케일에서도 나라에 의해 자원이 다를 때는, 특수화가 가능합니다. 예를 들어, 「MyResources_de_CH」에는, 스위스 (CH) 계의 독일어 (de)의 객체가 포함되어 있습니다. 자원의 일부만을 수정할 수도 있습니다.

프로그램으로 로케일 고유의 객체가 필요한 때는,getBundle 메소드를 사용해,ResourceBundle 클래스를 다음과 같이 로드합니다.

 ResourceBundle myResources =
      ResourceBundle.getBundle("MyResources", currentLocale);
 

자원 번들은, 키와 값의 페어가 되어 있습니다. 키는, 번들의 로케일 고유의 객체를 일의에 식별합니다. 키와 값의 2 개의 페어가 포함되어 있는 ListResourceBundle 의 예를 나타냅니다.

 public class MyResources extends ListResourceBundle {
     protected Object[][] getContents() {
         return new Object[][] {
             // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK")
             {"OkKey", "OK"},
             {"CancelKey", "Cancel"},
             // END OF MATERIAL TO LOCALIZE
        };
     }
 }
 
키는 항상 String 입니다. 이 예에서는, 키는 「OkKey」와「CancelKey」입니다. 전술한 예에서는, 값 「OK」와「Cancel」도 String 입니다만, 반드시 그런 필요는 없습니다. 값은, 어느 형태의 객체에서도 가능합니다.

자원 번들로부터 적절한 getter 메소드를 사용해 객체를 검색합니다. 「OkKey」와「CancelKey」는 어느쪽이나 캐릭터 라인이므로, 검색에는 getString 를 사용합니다.

 button1 = new Button(myResources.getString("OkKey"));
 button2 = new Button(myResources.getString("CancelKey"));
 
getter 메소드는, 모두 인수로서 키를 요구해, 검출한 객체를 돌려줍니다. 객체가 발견되지 않는 경우, getter 메소드는 MissingResourceException 를 throw 합니다.

getString 이외에,ResourceBundle 에서는, 캐릭터 라인 배열을 취득하는 getStringArray 메소드도 제공합니다. 같이 다른 형태의 객체를 취득하는 총칭 getObject 메소드도 제공합니다. getObject 를 사용하는 경우, 결과를 적절한 형태에 캐스트 할 필요가 있습니다. 다음에 예를 나타냅니다.

 int[] myIntegers = (int[]) myResources.getObject("intList");
 

Java 플랫폼에서는,ResourceBundle 의 2 개의 서브 클래스 ListResourceBundlePropertyResourceBundle 가 준비되어 있습니다. 이것들은 자원을 작성꽤 간단한 방법을 제공합니다. 전의 예로 간단하게 가리킨 것처럼,ListResourceBundle 는, 그 자원을 키와 값의 페어의 리스트로서 관리합니다. PropertyResourceBundle 는, 프로퍼티 파일을 사용해 그 자원을 관리합니다.

ListResourceBundle 또는 PropertyResourceBundle 로는 불충분한 때는, 독자적인 ResourceBundle 서브 클래스를 쓸 수가 있습니다. 서브 클래스에서 오버라이드(override) 하지 않으면 안 되는 메소드는 2 개 있습니다. handleGetObjectgetKeys() 입니다.

ResourceBundle.Control

ResourceBundle.Control 클래스는,ResourceBundle.Control 인스턴스를 취하는 getBundle 팩토리 메소드가 번들 로드 처리를 실행할 때에 필요로 하는 정보를 제공합니다. 사용자 독자적인 서브 클래스를 구현하면, 표준 이외의 자원 번들 형식을 이용할 수 있도록(듯이) 하거나 검색 순서를 변경하거나 캐쉬 파라미터를 정의하거나 할 수 있습니다. 상세한 것에 대하여는, 그 클래스와 getBundle 팩토리 메소드의 설명을 참조해 주세요.

캐쉬 관리

getBundle 팩토리 메소드에 의해 작성된 자원 번들 인스턴스는 디폴트로, 캐쉬에 포함됩니다. 팩토리 메소드는, 목적의 자원 번들 인스턴스가 캐쉬에 포함되고 있으면, 그 같은 인스턴스를 여러 차례 돌려줍니다. getBundle 클라이언트는, 캐쉬를 클리어 하거나 유효기간의 값을 사용해 캐쉬내의 자원 번들 인스턴스의 수명을 관리하거나 자원 번들 인스턴스를 캐쉬하지 않게 지정하거나 할 수 있습니다. 상세한 것에 대하여는,getBundle 팩토리 메소드,clearCache ,ResourceBundle.Control.getTimeToLive , 및 ResourceBundle.Control.needsReload 의 설명을 참조해 주세요.

다음에 있는 것은 ResourceBundle 의 서브 클래스 MyResources 의 매우 간단한 예입니다. 이 서브 클래스는 2 개의 자원을 관리합니다 (서브 클래스가 다수의 자원을 관리하는 경우는,Map 를 사용한다). 「친레벨」의 ResourceBundle 가, (아래와 같은 okKey 와 같이) 같은 값을 가지는 같은 키를 취급하는 경우는, 값을 제공할 필요는 없습니다.
 // default (English language, United States)
 public class MyResources extends ResourceBundle {
     public Object handleGetObject(String key) {
         if (key.equals("okKey")) return "Ok";
         if (key.equals("cancelKey")) return "Cancel";
         return null;
     }
 
     public Enumeration<String> getKeys() {
         return Collections.enumeration(keySet());
     }
 
     // Overrides handleKeySet() so that the getKeys() implementation
     // can rely on the keySet() value.
     protected Set<String> handleKeySet() {
         return new HashSet<String>(Arrays.asList("okKey", "cancelKey"));
     }
 }

 // German language
 public class MyResources_de extends MyResources {
     public Object handleGetObject(String key) {
         // don't need okKey, since parent level handles it.
         if (key.equals("cancelKey")) return "Abbrechen";
         return null;
     }
 
     protected Set<String> handleKeySet() {
         return new HashSet<String>(Arrays.asList("cancelKey"));
     }
 }
 
ResourceBundle 의 싱글 패밀리의 사용을 제한할 필요는 없습니다. 예를 들어, 예외 메세지 ExceptionResources (ExceptionResources_fr,ExceptionResources_de 등)로 1 개의 자원, 위젯 WidgetResource (WidgetResources_fr,WidgetResources_de 등)로 1 개의 자원과 같이, 좋아하는 대로 자원을 분할해 번들세트를 가질 수도 있습니다.

도입된 버젼:
JDK1. 1
관련 항목:
ListResourceBundle , PropertyResourceBundle , MissingResourceException

상자의 클래스의 개요
static class ResourceBundle.Control
          ResourceBundle.Control 는, 번들 로드 처리중에 ResourceBundle.getBundle 팩토리 메소드에 의해 불려 가는 일련의 콜백 메소드를 정의합니다.
 
필드의 개요
protected  ResourceBundle parent
          이 번들의 친번들.
 
생성자 의 개요
ResourceBundle ()
          유일한 생성자 입니다.
 
메소드의 개요
static void clearCache ()
          호출원의 클래스 로더를 사용해 로드 된 자원 번들의 모든 것을, 캐쉬로부터 삭제합니다.
static void clearCache (ClassLoader  loader)
          지정된 클래스 로더를 사용해 로드 된 자원 번들의 모든 것을, 캐쉬로부터 삭제합니다.
 boolean containsKey (String  key)
          지정된 key 가 이 ResourceBundle 또는 그 친번들내에 포함될지 어떨지를 판정합니다.
static ResourceBundle getBundle (String  baseName)
          지정된 기저명, 디폴트의 로케일, 및 호출측의 클래스 로더를 사용해, 자원 번들을 가져옵니다.
static ResourceBundle getBundle (String  baseName, Locale  locale)
          지정된 기저명, 로케일, 및 호출측의 클래스 로더를 사용해, 자원 번들을 가져옵니다.
static ResourceBundle getBundle (String  baseName, Locale  locale, ClassLoader  loader)
          지정된 기저명, 로케일, 클래스 로더를 사용해, 자원 번들을 가져옵니다.
static ResourceBundle getBundle (String  baseName, Locale  targetLocale, ClassLoader  loader, ResourceBundle.Control  control)
          지정된 기저명, 타겟 로케일, 클래스 로더, 및 컨트롤을 사용해, 자원 번들을 돌려줍니다.
static ResourceBundle getBundle (String  baseName, Locale  targetLocale, ResourceBundle.Control  control)
          지정된 기저명, 타겟 로케일, 컨트롤, 및 호출측의 클래스 로더를 사용해, 자원 번들을 돌려줍니다.
static ResourceBundle getBundle (String  baseName, ResourceBundle.Control  control)
          지정된 기저명, 디폴트의 로케일, 및 지정된 컨트롤에 근거해, 자원 번들을 돌려줍니다.
abstract  Enumeration <String > getKeys ()
          키의 리스트를 돌려줍니다.
 Locale getLocale ()
          자원 번들의 Locale 를 돌려줍니다.
 Object getObject (String  key)
          이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 객체를 가져옵니다.
 String getString (String  key)
          이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 캐릭터 라인을 가져옵니다.
 String [] getStringArray (String  key)
          이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 캐릭터 라인 배열을 가져옵니다.
protected abstract  Object handleGetObject (String  key)
          이 자원 번들로부터 지정된 키의 객체를 가져옵니다.
protected  Set <String > handleKeySet ()
          이 ResourceBundle 인 만큼 포함되고 있는 키의 Set 를 돌려줍니다.
 Set <String > keySet ()
          이 ResourceBundle 와 그 친번들내에 포함되는 모든 키의 Set 를 돌려줍니다.
protected  void setParent (ResourceBundle  parent)
          이 번들의 친번들을 설정합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

필드의 상세

parent

protected ResourceBundle  parent
이 번들의 친번들. 친번들은, 이 번들에 특정의 자원이 포함되지 않을 때에 getObject 에 의해 참조됩니다.

생성자 의 상세

ResourceBundle

public ResourceBundle()
유일한 생성자 입니다. 서브 클래스의 생성자 에 의한 호출용으로, 일반적으로은 암묵적으로 불려 갑니다.

메소드의 상세

getString

public final String  getString(String  key)
이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 캐릭터 라인을 가져옵니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
(String) getObject (key).

파라미터:
key - 바람직한 캐릭터 라인의 키
반환값:
지정된 키의 캐릭터 라인
예외:
NullPointerException - keynull 의 경우
MissingResourceException - 지정된 키의 객체가 발견되지 않는 경우
ClassCastException - 지정된 키가 발견된 객체가 캐릭터 라인이 아닌 경우

getStringArray

public final String [] getStringArray(String  key)
이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 캐릭터 라인 배열을 가져옵니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
(String[]) getObject (key).

파라미터:
key - 바람직한 캐릭터 라인 배열의 키
반환값:
지정된 키의 캐릭터 라인 배열
예외:
NullPointerException - keynull 의 경우
MissingResourceException - 지정된 키의 객체가 발견되지 않는 경우
ClassCastException - 지정된 키가 발견된 객체가 캐릭터 라인 배열이 아닌 경우

getObject

public final Object  getObject(String  key)
이 자원 번들 또는 그 친자원 번들의 어느쪽이든으로부터 지정된 키의 객체를 가져옵니다. 이 메소드는, 최초로 handleGetObject 를 사용해, 이 자원 번들로부터 객체를 취득하려고 합니다. 객체를 취득하지 못하고, 친자원 번들이 null 가 아닌 경우, 부모의 getObject 메소드를 호출합니다. 그런데도 취득할 수 없는 경우는, MissingResourceException 를 throw 합니다.

파라미터:
key - 바람직한 객체의 키
반환값:
지정된 키의 객체
예외:
NullPointerException - keynull 의 경우
MissingResourceException - 지정된 키의 객체가 발견되지 않는 경우

getLocale

public Locale  getLocale()
자원 번들의 Locale 를 돌려줍니다. 이 메소드는, 반환된 자원 번들이 정말로 요구된 로케일에 대응하고 있는지, 또는 폴 백인지를 판정하기 위해서, getBundle()를 호출한 후에 사용할 수 있습니다.

반환값:
이 자원 번들의 로케일

setParent

protected void setParent(ResourceBundle  parent)
이 번들의 친번들을 설정합니다. 친번들은, 이 번들에 특정의 자원이 포함되지 않을 때에 getObject 에 의해 참조됩니다.

파라미터:
parent - 이 번들의 친번들

getBundle

public static final ResourceBundle  getBundle(String  baseName)
지정된 기저명, 디폴트의 로케일, 및 호출측의 클래스 로더를 사용해, 자원 번들을 가져옵니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
getBundle(baseName, Locale.getDefault(), this.getClass(). getClassLoader()),
getClassLoader() 가,ResourceBundle 의 시큐리티 특권에 의해 실행되는 것만이 다릅니다. 검색과 인스턴스 생성 방법의 상세한 것에 대하여는,getBundle 를 참조해 주세요.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
반환값:
지정된 기저명과 디폴트의 로케일의 자원 번들
예외:
NullPointerException - baseNamenull 의 경우
MissingResourceException - 지정된 기저명의 자원 번들이 발견되지 않는 경우

getBundle

public static final ResourceBundle  getBundle(String  baseName,
                                             ResourceBundle.Control  control)
지정된 기저명, 디폴트의 로케일, 및 지정된 컨트롤에 근거해, 자원 번들을 돌려줍니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
getBundle(baseName, Locale.getDefault(),
this.getClass(). getClassLoader(), control),
 
getClassLoader() 가,ResourceBundle 의 시큐리티 특권에 의해 실행되는 것만이 다릅니다. ResourceBundle.Control 를 사용한 자원 번들 로드 처리의 완전한 설명에 대해서는,getBundle 를 참조해 주세요.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
control - 자원 번들 로드 처리를 위한 정보를 제공하는 컨트롤
반환값:
지정된 기저명과 디폴트의 로케일의 자원 번들
예외:
NullPointerException - baseName 또는 controlnull 의 경우
MissingResourceException - 지정된 기저명의 자원 번들이 발견되지 않는 경우
IllegalArgumentException - 지정된 control 가 올바르게 실행되지 않는 경우 (예를 들어,control.getCandidateLocales 가 null 를 돌려주는 등. )control 의 검증이 필요에 따라서 실행되는 것에 주의
도입된 버젼:
1.6

getBundle

public static final ResourceBundle  getBundle(String  baseName,
                                             Locale  locale)
지정된 기저명, 로케일, 및 호출측의 클래스 로더를 사용해, 자원 번들을 가져옵니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
getBundle(baseName, locale, this.getClass(). getClassLoader()),
getClassLoader() 가,ResourceBundle 의 시큐리티 특권에 의해 실행되는 것만이 다릅니다. 검색과 인스턴스 생성 방법의 상세한 것에 대하여는,getBundle 를 참조해 주세요.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
locale - 자원 번들이 필요한 로케일
반환값:
지정된 기저명과 로케일의 자원 번들
예외:
NullPointerException - baseName 또는 localenull 의 경우
MissingResourceException - 지정된 기저명의 자원 번들이 발견되지 않는 경우

getBundle

public static final ResourceBundle  getBundle(String  baseName,
                                             Locale  targetLocale,
                                             ResourceBundle.Control  control)
지정된 기저명, 타겟 로케일, 컨트롤, 및 호출측의 클래스 로더를 사용해, 자원 번들을 돌려줍니다. 이 메소드를 호출하는 것은, 다음을 호출하는 것과 같습니다.
getBundle(baseName, targetLocale, this.getClass(). getClassLoader(),
control),
 
getClassLoader() 가,ResourceBundle 의 시큐리티 특권에 의해 실행되는 것만이 다릅니다. ResourceBundle.Control 를 사용한 자원 번들 로드 처리의 완전한 설명에 대해서는,getBundle 를 참조해 주세요.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
targetLocale - 자원 번들이 필요한 로케일
control - 자원 번들 로드 처리를 위한 정보를 제공하는 컨트롤
반환값:
지정된 기저명과 locales 내가 있는 Locale 에 대한 자원 번들
예외:
NullPointerException - baseName,locales, 또는 controlnull 의 경우
MissingResourceException - locales 내의 어느 로케일에 대해도 지정된 기저명의 자원 번들이 발견되지 않는 경우
IllegalArgumentException - 지정된 control 가 올바르게 실행되지 않는 경우 (예를 들어,control.getCandidateLocales 가 null 를 돌려주는 등. )control 의 검증이 필요에 따라서 실행되는 것에 주의
도입된 버젼:
1.6

getBundle

public static ResourceBundle  getBundle(String  baseName,
                                       Locale  locale,
                                       ClassLoader  loader)
지정된 기저명, 로케일, 클래스 로더를 사용해, 자원 번들을 가져옵니다.

이론적으로는,getBundle 에서는 다음의 방법을 사용해, 자원 번들의 검출 및 생성을 실시합니다.  

getBundle 는, 기저명, 지정된 로케일, 및 디폴트의 로케일 (Locale.getDefault 로부터 취득한 로케일)을 사용해,「후보의 번들명」의 순서를 생성합니다. 지정된 로케일의 언어, 나라, 및 변형이 모두 빈 상태(empty)의 캐릭터 라인의 경우, 기저명은 후보의 번들명에만 됩니다. 그 이외의 경우에는, 지정한 로케일 (language1, country1, variant1) 및 디폴트의 로케일 (language2, country2, variant2)의 속성치로부터, 다음의 순서가 생성됩니다.

최종 컴퍼넌트가 빈 상태(empty)의 캐릭터 라인의 경우, 후보의 번들명은 생략 됩니다. 예를 들어, country1 가 빈 상태(empty)의 캐릭터 라인의 경우, 2 번째의 후보의 번들명은 생략 됩니다.

getBundle 는 실제의 자원 번들을 「인스턴스화」할 수 있는 최초의 이름을 찾아내기 위해서(때문에), 후보의 번들명을 반복 처리 합니다. 각 후보 번들명 마다, 자원 번들을 다음과 같이 작성하려고 합니다.

결과 자원 번들이 발견되지 않는 경우,MissingResourceException 가 throw 됩니다.

결과 자원 번들이 발견되었을 때는, 그 친연쇄를 인스턴스화합니다. getBundle 는 후보의 번들명을 반복 처리 합니다. 이 번들명은, 결과 자원 번들의 번들명으로부터 변형, 나라, 및 언어를 (전에 「_」에 붙은 것에 관해서 매회) 연속해 삭제하는 것에 의해 가져옵니다. 전술한 것처럼, 최종 컴퍼넌트가 빈 상태(empty)의 캐릭터 라인인 경우, 후보의 번들명은 생략 됩니다. 각 후보의 번들명에 의해, 전술한 것처럼, 자원 번들을 인스턴스화하려고 합니다. 전에 인스턴스화한 자원 번들에 null 이외의 친자원 번들이 없는 한, 인스턴스에 성공했을 경우는 항상, 전에 인스턴스화한 자원 번들의 setParent 메소드를 새로운 자원 번들에 의해 호출합니다.

getBundle 는, 인스턴스화한 자원 번들을 캐쉬해, 같은 자원 번들의 인스턴스를 여러 차례 돌려줄 가능성이 있습니다.

baseName 인수는 완전 지정된 클래스명일 필요가 있습니다. 다만, 전버젼과의 호환성에 관해서는, Sun 의 Java SE 런타임 환경은 그것을 검증하지 않습니다. 그 때문에, 완전 지정된 클래스명 ( 「.」(을)를 사용) 대신에 경로명 ( 「/」을 사용)을 지정해,PropertyResourceBundle 에 액세스 할 수 있게 됩니다.

례:
다음의 클래스와 프로퍼티 파일이 제공되고 있습니다.

MyResources.class
MyResources.properties
MyResources_fr.properties
MyResources_fr_CH.class
MyResources_fr_CH.properties
MyResources_en.properties
MyResources_es_ES.class
 
모든 파일의 내용이 유효합니다 (즉, 「. class」파일은 ResourceBundle 의 public 비추상 서브 클래스를 포함하고 있어 「. properties」파일은 구문적으로 올바르다). 디폴트의 로케일은 Locale("en", "GB") 입니다.  

표시된 로케일 인수치를 가지는 getBundle 의 호출은, 다음의 소스로부터 자원 번들을 인스턴스화합니다.

  • Locale("fr", "CH") :result MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class
  • Locale("fr", "FR") :result MyResources_fr.properties, parent MyResources.class
  • Locale("de", "DE") :result MyResources_en.properties, parent MyResources.class
  • Locale("en", "US") :result MyResources_en.properties, parent MyResources.class
  • Locale("es", "ES") :result MyResources_es_ES.class, parent MyResources.class

파일 MyResources_fr_CH.properties 가 사용되는 것은 결코 없습니다. 왜냐하면, 이 파일은 MyResources_fr_CH.class 에 의해 은폐 되기 때문입니다. 같이 MyResources.properties 도 MyResources.class 에 의해 은폐 됩니다.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
locale - 자원 번들이 필요한 로케일
loader - 자원 번들의 로드원의 클래스 로더
반환값:
지정된 기저명과 로케일의 자원 번들
예외:
NullPointerException - baseName,locale 또는loadernull 의 경우
MissingResourceException - 지정된 기저명의 자원 번들이 발견되지 않는 경우
도입된 버젼:
1.2

getBundle

public static ResourceBundle  getBundle(String  baseName,
                                       Locale  targetLocale,
                                       ClassLoader  loader,
                                       ResourceBundle.Control  control)
지정된 기저명, 타겟 로케일, 클래스 로더, 및 컨트롤을 사용해, 자원 번들을 돌려줍니다. control 인수가 없는 getBundle 팩토리 메소드 과는 달리, 지정된 control 에 의해, 자원 번들을 검색 및 인스턴스화할 방법이 정해집니다. 기본적으로,control 가 지정되었을 경우의 번들 로드 처리의 실행 순서는, 다음과 같이 됩니다.

  1. 이 팩토리 메소드는, 지정된 baseName,targetLocale, 및 loader 에 대한 자원 번들을, 캐쉬내에서 검색합니다. 요구된 자원 번들의 인스턴스가 캐쉬내에서 발견되어, 그 인스턴스와 모든 친인스턴스의 유효기간이 아직 지나지 않은 경우에는, 그 인스턴스가 호출해 바탕으로 돌려주어집니다. 그 이외의 경우, 이 팩토리 메소드는 이하의 로드 처리로 진행됩니다.
  2. 번들명 또는 자원명을 생성하는 목적으로,control.getFormats 메소드가 불려 가 자원 번들 형식이 취득됩니다. 캐릭터 라인「java.class」「java.properties」는 각각, 클래스 베이스의 자원 번들과 프로퍼티 베이스의 자원 번들을 나타냅니다. 「java.」(으)로 시작되는 그 외의 캐릭터 라인은, 장래의 확장용으로서 예약되고 있기 (위해)때문에, 어플리케이션 정의 형식에서는 사용하지 말아 주세요. 그 외의 캐릭터 라인은, 어플리케이션 정의 형식을 나타냅니다.
  3. control.getCandidateLocales 메소드가 타겟 로케일을 지정해 불려 가 자원 번들의 검색에 사용되는 「후보 로케일」의 리스트가 취득됩니다.
  4. control.newBundle 메소드가 불려 가 이 기저 번들명, 어느 후보 로케일, 및 있는 형식에 대한 ResourceBundle 가 인스턴스화 됩니다. (후술의 캐쉬 검색에 관한 주를 참조. ) 이 순서는 후보 로케일과 형식의 모든 편성에 대해 반복해져newBundle 메소드가 ResourceBundle 인스턴스를 돌려줄까 모든 편성이 사용된 시점에서 종료합니다. 예를 들어, 후보 로케일이 Locale("de", "DE"),Locale("de"), 및 Locale("") 이며, 형식이「java.class」「java.properties」였을 경우,control.newBundle 의 호출시에 사용해야 할 로케일과 형식의 편성의 순서는, 다음과 같이 됩니다.
    로케일
    형식
    Locale("de", "DE")
    java.class
    Locale("de", "DE") java.properties
    Locale("de") java.class
    Locale("de") java.properties
    Locale("")
    java.class
    Locale("") java.properties
  5. 1 개(살)전의 순서로 자원 번들이 1 개도 발견되지 않았던 경우는, 순서 6 에 진행됩니다. 발견된 번들이 기저 번들 (Locale("") 에 대한 번들)이며, 후보 로케일 리스트에 Locale("") 밖에 포함되지 않았던 경우에는, 그 번들을 호출해 바탕으로 돌려줍니다. 발견된 번들이 기저 번들이지만, 후보 로케일 리스트에 Locale("") 이외의 로케일이 포함되어 있었을 경우에는, 그 번들을 보류해 순서 6 에 진행됩니다. 발견된 번들이 기저 번들이 아닌 경우는, 순서 7 에 진행됩니다.
  6. 자원 번들의 새로운 검색을 시도하기 위해서(때문에),control.getFallbackLocale 메소드가 불려 가 폴 백 로케일 (현재의 타겟 로케일의 대체가 되는 로케일)이 취득됩니다. 이 메소드가 null 이외의 로케일을 돌려주었을 경우, 그것이 다음의 타겟 로케일이 되어, 순서 3 으로부터 로드 처리가 개시됩니다. 그 이외의 경우, 1 개(살)전의 순서 5 로 기저 번들이 발견되어, 그것을 보류하고 있었을 경우에는, 그 기저 번들이 이 시점에서 호출해 바탕으로 돌려주어집니다. 그 이외의 경우는, MissingResourceException 가 throw 됩니다.
  7. 이 시점에서, 기저 번들 이외의 자원 번들이 발견되고 있습니다. 이 번들이 자신의 초기화중에 부모를 설정했을 경우에는, 이 번들이 호출해 바탕으로 돌려주어집니다. 그 이외의 경우, 그 검색에 사용된 후보 로케일 리스트에 근거해, 그친연쇄가 인스턴스화 됩니다. 마지막으로, 그 번들이 호출해 바탕으로 돌려주어집니다.

상기의 자원 번들 로드 처리동안, 이 팩토리 메소드는,control.newBundle 메소드를 호출하기 전에 캐쉬를 검색합니다. 캐쉬내에서 발견된 자원 번들의 유효기간이 지나고 있었을 경우, 팩토리 메소드는 control.needsReload 메소드를 호출해, 그 자원 번들을 재로드할 필요가 있을지 어떨지를 판정합니다. 재로드가 필요한 경우, 팩토리 메소드는 control.newBundle 를 호출해 자원 번들을 재로드합니다. control.newBundlenull 를 돌려주었을 경우, 팩토리 메소드는, 존재하지 않는 자원 번들의 표적으로서 더미의 자원 번들을 캐쉬내에 포함합니다. 이것에 의해, 후속의 요구에 대한 검색 오버헤드를 회피할 수 있습니다. 그러한 더미의 자원 번들은,control 로 지정된 것과 같은의 유효기간 제어하에 들어갑니다.

디폴트에서는, 로드 된 자원 번들의 모든 것이 캐쉬에 포함됩니다. 상세한 것에 대하여는,control.getTimeToLive 를 참조해 주세요.

디폴트의 ResourceBundle.Control 구현을 사용한 번들 로드 처리의 예를, 다음에 나타냅니다.

조건:

우선,getBundle 는, 다음의 차례로 자원 번들의 로드를 시도합니다.

이 시점에서,getBundlefoo/bar/Messages.properties 를 찾아냅니다만, 그것을 보류합니다. 왜냐하면, 그것은 기저 번들이기 때문입니다. getBundlecontrol.getFallbackLocale("foo.bar.Messages", Locale.ITALY) 를 호출합니다. 그러자(면),Locale.FRENCH 가 돌려주어집니다. 다음에,getBundle 는 다음의 차례로 번들의 로드를 시도합니다.

getBundlefoo/bar/Messages_fr.properties 를 찾아내ResourceBundle 인스턴스를 작성합니다. 다음에,getBundle 는 후보 로케일의 리스트에 근거해, 그 친연쇄를 설정합니다. 리스트내에서 발견되는 것은 foo/bar/Messages.properties 만입니다. getBundle 는,foo/bar/Messages_fr.properties 에 대한 인스턴스의 부모가 되는 ResourceBundle 인스턴스를 작성합니다.

파라미터:
baseName - 자원 번들의 기저명. 완전 지정 클래스명
targetLocale - 자원 번들이 필요한 로케일
loader - 자원 번들의 로드원의 클래스 로더
control - 자원 번들 로드 처리를 위한 정보를 제공하는 컨트롤
반환값:
지정된 기저명과 로케일의 자원 번들
예외:
NullPointerException - baseName,targetLocale,loader, 또는 controlnull 의 경우
MissingResourceException - 지정된 기저명의 자원 번들이 발견되지 않는 경우
IllegalArgumentException - 지정된 control 가 올바르게 실행되지 않는 경우 (예를 들어,control.getCandidateLocales 가 null 를 돌려주는 등. )control 의 검증이 필요에 따라서 실행되는 것에 주의
도입된 버젼:
1.6

clearCache

public static final void clearCache()
호출원의 클래스 로더를 사용해 로드 된 자원 번들의 모든 것을, 캐쉬로부터 삭제합니다.

도입된 버젼:
1.6
관련 항목:
ResourceBundle.Control.getTimeToLive(String, Locale)

clearCache

public static final void clearCache(ClassLoader  loader)
지정된 클래스 로더를 사용해 로드 된 자원 번들의 모든 것을, 캐쉬로부터 삭제합니다.

파라미터:
loader - 클래스 로더
예외:
NullPointerException - loader 가 null 의 경우
도입된 버젼:
1.6
관련 항목:
ResourceBundle.Control.getTimeToLive(String, Locale)

handleGetObject

protected abstract Object  handleGetObject(String  key)
이 자원 번들로부터 지정된 키의 객체를 가져옵니다. 이 자원 번들이, 지정된 키의 객체를 포함하지 않는 경우는, null 를 돌려줍니다.

파라미터:
key - 바람직한 객체의 키
반환값:
지정된 키의 객체, 또는 null
예외:
NullPointerException - keynull 의 경우

getKeys

public abstract Enumeration <String > getKeys()
키의 리스트를 돌려줍니다.

반환값:
ResourceBundle 와 그 친번들내에 포함되는 키의 Enumeration

containsKey

public boolean containsKey(String  key)
지정된 key 가 이 ResourceBundle 또는 그 친번들내에 포함될지 어떨지를 판정합니다.

파라미터:
key - 자원의 key
반환값:
지정된 key 가 이 ResourceBundle 또는 그 친번들내에 포함되는 경우는 true, 그 이외의 경우는 false
예외:
NullPointerException - keynull 의 경우
도입된 버젼:
1.6

keySet

public Set <String > keySet()
ResourceBundle 와 그 친번들내에 포함되는 모든 키의 Set 를 돌려줍니다.

반환값:
ResourceBundle 와 그 친번들내에 포함되는 모든 키의 Set
도입된 버젼:
1.6

handleKeySet

protected Set <String > handleKeySet()
ResourceBundle 인 만큼 포함되고 있는 키의 Set 를 돌려줍니다.

디폴트 구현은,getKeys 메소드로부터 반환되는 키의 Set 를 돌려줍니다. 다만,handleGetObject 메소드가 null 를 돌려주는 것 같은 키는 제외됩니다. Set 가 작성되면(자), 그 값이 이 ResourceBundle 내에 보존됩니다. 이것에 의해, 다음의 호출시에 같은 Set 가 생성되는 것을 막을 수가 있습니다. 처리의 고속화를 꾀하려면 , 서브 클래스 구현내에서 이 메소드를 오버라이드(override) 해 주세요.

반환값:
ResourceBundle 인 만큼 포함되고 있는 키의 Set
도입된 버젼:
1.6

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.