ResourceBundle — 로케일별 리소스 번들
ResourceBundle — 로케일별 리소스 번들
ResourceBundle에는 로케일별 객체가 포함돼요. 프로그램이 로케일별 리소스(예: 문자열)가 필요하면 현재 사용자의 로케일에 적합한 리소스 번들에서 로드할 수 있어요. 이렇게 하면 로케일별 정보를 리소스 번들에 격리시켜 코드를 사용자 로케일과 크게 독립적으로 작성할 수 있어요. 이를 통해 프로그램을 쉽게 현지화·번역하고, 여러 로케일을 동시에 처리하며, 나중에 더 많은 로케일을 쉽게 지원하도록 수정할 수 있어요.
본문
public abstract class ResourceBundle extends Object
리소스 번들은 공통 기본 이름(base name)을 공유하는 구성원들로 이루어진 패밀리에 속해요. 예를 들어 기본 이름이 "MyResources"인 패밀리는 기본 구성원 "MyResources"(특정 로케일이 지원되지 않을 때 최후의 번들)와 독일어 구성원 "MyResources_de"를 가질 수 있어요. 두 구성원은 같은 항목들을 담지만 각 로케일에 맞게 번역됐어요. 예를 들어 취소 버튼 문자열이 "MyResources"에서는 "Cancel", "MyResources_de"에서는 "Abbrechen"일 수 있어요. 국가별 차이는 "MyResources_de_CH"처럼 전문화된 구성원으로 만들 수 있어요.
프로그램이 로케일별 객체가 필요하면 getBundle 메서드로 번들을 로드해요.
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
필드와 생성자
protected ResourceBundle parent— 이 번들의 부모 번들로, 이 번들에 특정 리소스가 없으면getObject가 검색해요.ResourceBundle()— 유일한 생성자예요(서브클래스 생성자에서 호출).
조회 메서드
getObject(String key)— 이 번들이나 부모에서 키에 해당하는 객체를 가져와요. 못 찾으면MissingResourceException을 던져요.getString(String key)— 문자열을 반환해요((String) getObject(key)와 동등).getStringArray(String key)— 문자열 배열을 반환해요.getLocale()— 이 번들의 로케일을 반환해요.getBaseBundleName()— 이 번들의 기본 이름을 반환하고, 알 수 없으면null을 반환해요.containsKey(String)/keySet()— 이 번들이나 부모에 키가 있는지/모든 키를 반환해요.handleKeySet()— 이 번들에만 있는 키 집합을 반환해요.
로드 팩토리
getBundle 오버로드가 여러 가지 있어요. 기본 이름, 로케일, 모듈, 클래스 로더, ResourceBundle.Control을 조합해 번들을 가져와요.
getBundle(String baseName),getBundle(String baseName, Locale),getBundle(String, Module),getBundle(String, Locale, Module)— 기본 로케일/지정 로케일을 사용해요.getBundle(String, Locale, ClassLoader)/getBundle(String, Locale, ClassLoader, Control)— 클래스 로더와 컨트롤을 지정해요.getBundle(String, Locale, Control)—Control로 위치·인스턴스화 방식을 지정해요.clearCache()/clearCache(ClassLoader)— 캐시에서 번들을 제거해요.
서브클래스가 구현할 메서드
handleGetObject(String key)— 이 번들에서 키에 해당하는 객체를 반환하고, 없으면null을 반환해요(추상).getKeys()— 키들의Enumeration을 반환해요(추상).
기타
setParent(ResourceBundle) — 이 번들의 부모 번들을 설정해요.