Spec-Zone.ru › OpenJDK 8

Класс ResourceBundle

  • java.lang.Object
    • java.util.ResourceBundle
Прямые известные подклассы:
ListResourceBundle, PropertyResourceBundle

public abstract class ResourceBundle
extends Object

Обработка ресурсов содержит объекты, специфичные для региональных параметров. Когда вашей программе необходим ресурс, специфичный для региональных параметров, например, String, программа может загрузить его из набора ресурсов, соответствующего текущим региональным параметрам пользователя. Таким образом, вы можете писать код программы, который в значительной степени независим от региональных параметров пользователя, изолируя большую часть, если не все, информации, специфичной для региональных параметров, в наборах ресурсов.

Это позволяет вам писать программы, которые могут:

  • легко локализоваться или переводиться на разные языки
  • обрабатывать несколько региональных параметров одновременно
  • легко изменяться в будущем для поддержки ещё большего числа региональных параметров

Наборы ресурсов принадлежат семействам, члены которых имеют общее базовое имя, но также имеют дополнительные компоненты, которые идентифицируют их региональные параметры. Например, базовое имя семейства наборов ресурсов может быть "MyResources". Семейство должно иметь набор ресурсов по умолчанию, который просто имеет то же имя, что и его семейство — "MyResources", и будет использоваться в качестве набора последней надежды, если конкретный региональный параметр не поддерживается. Затем семейство может предоставить столько регионально-специфичных членов, сколько потребуется, например, немецкий член с именем "MyResources_de".

Каждый набор ресурсов в семействе содержит те же самые элементы, но элементы переведены для регионального параметра, представленного этим набором ресурсов. Например, как "MyResources", так и "MyResources_de" могут иметь String, который используется на кнопке для отмены операций. В "MyResources" String может содержать "Cancel", а в "MyResources_de" — "Abbrechen".

Если существуют различные ресурсы для разных стран, вы можете сделать специализации: например, "MyResources_de_CH" содержит объекты для немецкого языка (de) в Швейцарии (CH). Если вы хотите изменить только некоторые из ресурсов в специализации, вы можете это сделать.

Когда вашей программе нужен объект, специфичный для региональных параметров, она загружает класс ResourceBundle с помощью метода getBundle:

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

Наборы ресурсов содержат пары ключ/значение. Ключи однозначно идентифицируют объект, специфичный для региональных параметров, в наборе. Вот пример набора 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". В приведенном выше примере значения также String — "OK" и "Cancel" — но они не обязаны ими быть. Значения могут быть любым типом объекта.

Вы получаете объект из набора ресурсов с помощью соответствующего метода-получателя. Поскольку "OkKey" и "CancelKey" оба являются строками, вы бы использовали getString для их получения:

button1 = new Button(myResources.getString("OkKey"));
button2 = new Button(myResources.getString("CancelKey"));
Методы-получатели все требуют ключ в качестве аргумента и возвращают объект, если он найден. Если объект не найден, метод-получатель выбрасывает MissingResourceException.

Помимо getString, ResourceBundle также предоставляет метод для получения массивов строк, getStringArray, а также общий getObject метод для любого другого типа объекта. При использовании getObject, вам нужно будет привести результат к соответствующему типу. Например:

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

Java платформа предоставляет два подкласса ResourceBundle, ListResourceBundle и PropertyResourceBundle, которые предоставляют довольно простой способ создания ресурсов. Как вы кратко видели в предыдущем примере, ListResourceBundle управляет своим ресурсом как списком пар ключ/значение. PropertyResourceBundle использует файл свойств для управления своими ресурсами.

Если ListResourceBundle или PropertyResourceBundle не подходят для ваших нужд, вы можете написать свой собственный подкласс ResourceBundle. Ваши подклассы должны переопределять два метода: handleGetObject и getKeys().

Реализация подкласса ResourceBundle должна быть потокобезопасной, если она одновременно используется несколькими потоками. Стандартные реализации неабстрактных методов в этом классе, а также методы в прямых известных конкретных подклассах ListResourceBundle и PropertyResourceBundle являются потокобезопасными.

ResourceBundle.Control

Класс ResourceBundle.Control предоставляет информацию, необходимую для выполнения процесса загрузки набора ресурсов фабричными методами getBundle, которые принимают экземпляр ResourceBundle.Control. Вы можете реализовать свой собственный подкласс, чтобы включить нестандартные форматы наборов ресурсов, изменить стратегию поиска или определить параметры кэширования. Обратитесь к описаниям класса и фабричного метода getBundle для получения подробностей.

Для фабричных методов, которые не принимают экземпляр ResourceBundle.Control, их поведение по умолчанию при загрузке наборов ресурсов может быть изменено с помощью установленных реализаций ResourceBundleControlProvider. Любые установленные поставщики обнаруживаются на стадии загрузки класса ResourceBundle. Если какой-либо из поставщиков предоставляет ResourceBundle.Control для данного базового имени, этот ResourceBundle.Control будет использоваться вместо значения по умолчанию ResourceBundle.Control. Если установлено более одного поставщика услуг для поддержки одного и того же базового имени, будет использоваться первый поставщик, возвращенный из ServiceLoader.

Управление кэшем

Экземпляры наборов ресурсов, созданные фабричными методами getBundle, кэшируются по умолчанию, и фабричные методы возвращают тот же экземпляр набора ресурсов несколько раз, если он был кэширован. Клиенты getBundle могут очистить кэш, управлять временем существования кэшированных экземпляров наборов ресурсов с помощью значений времени жизни или указать, чтобы наборы ресурсов не кэшировались. Обратитесь к описаниям фабричного метода getBundle, clearCache, ResourceBundle.Control.getTimeToLive и ResourceBundle.Control.needsReload для получения подробностей.

Пример

Следующий пример — очень простой пример подкласса ResourceBundle, MyResources, который управляет двумя ресурсами (для большего числа ресурсов, вероятно, вы бы использовали 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, ...), и один для виджетов, WidgetResource (WidgetResources_fr, WidgetResources_de, ...); делите ресурсы как вам удобно.
С:
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 или его родительские наборы ресурсов.

String getBaseBundleName()

Возвращает базовое имя этого набора ресурсов, если известно, или null, если неизвестно.

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

Возвращает локаль этого набора ресурсов.

Object getObject(String key)

Получает объект для заданного ключа из этого набора ресурсов или одного из его родительских наборов ресурсов.

String getString(String key)

Получает строку для заданного ключа из этого набора ресурсов или одного из его родительских наборов ресурсов.

String[] getStringArray(String key)

Получает массив строк для заданного ключа из этого набора ресурсов или одного из его родительских наборов ресурсов.

protected abstract Object handleGetObject(String key)

Получает объект для заданного ключа из этого набора ресурсов.

protected Set<String> handleKeySet()

Возвращает перечисление ключей, содержащихся только в этом ResourceBundle.

Set<String> keySet()

Возвращает перечисление всех ключей, содержащихся в этом ResourceBundle и его родительских наборах ресурсов.

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

Единственный конструктор. (Для вызова конструкторами подклассов, обычно неявный).

Методы

getBaseBundleName

public String getBaseBundleName()

Возвращает базовое имя этого пучка, если известно, или null если неизвестно. Если не null, то это значение параметра baseName, переданного в метод ResourceBundle.getBundle(...), при загрузке пучка ресурсов.

Возвращает:
Базовое имя пучка ресурсов, предоставленное и ожидаемое методами ResourceBundle.getBundle(...).
С:
1.8
См. также:
getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader)

getString

public final String getString(String key)

Получает строку для заданного ключа из этого пучка ресурсов или из одного из его родительских пучков. Вызов этого метода эквивалентен вызову

(String) getObject(key).

Параметры:
key - ключ для желаемой строки
Возвращает:
строка для заданного ключа
Исключения:
NullPointerException - если key является null
MissingResourceException - если объект для заданного ключа не найден
ClassCastException - если объект, найденный для заданного ключа, не является строкой

getStringArray

public final String[] getStringArray(String key)

Получает массив строк для заданного ключа из этого пучка ресурсов или из одного из его родительских пучков. Вызов этого метода эквивалентен вызову

(String[]) getObject(key).

Параметры:
key - ключ для желаемого массива строк
Возвращает:
массив строк для заданного ключа
Исключения:
NullPointerException - если key является null
MissingResourceException - если объект для заданного ключа не найден
ClassCastException - если объект, найденный для заданного ключа, не является массивом строк

getObject

public final Object getObject(String key)

Получает объект для заданного ключа из этого пучка ресурсов или из одного из его родительских пучков. Этот метод сначала пытается получить объект из этого пучка ресурсов, используя handleGetObject. Если это не удается, и родительский пучок ресурсов не null, он вызывает метод getObject родительского пучка. Если это все ещё не удалось, выбрасывается MissingResourceException.

Параметры:
key - ключ для желаемого объекта
Возвращает:
объект для заданного ключа
Исключения:
NullPointerException - если key является null
MissingResourceException - если объект для заданного ключа не найден

getLocale

public Locale getLocale()

Возвращает локаль этого пучка ресурсов. Этот метод можно использовать после вызова 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 - если baseName является null
MissingResourceException - если пучок ресурсов для указанного базового имени не найден

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             ResourceBundle.Control control)

Возвращает пучок ресурсов, используя указанное базовое имя, стандартную локаль и заданный контроллер. Вызов этого метода эквивалентен вызову

getBundle(baseName, Locale.getDefault(),
           this.getClass().getClassLoader(), control),
за исключением того, что getClassLoader() выполняется с привилегиями безопасности ResourceBundle. См. getBundle для полного описания процесса загрузки пучка ресурсов с ResourceBundle.Control.

Параметры:
baseName - базовое имя пучка ресурсов, полное имя класса
control - контроллер, предоставляющий информацию для процесса загрузки пучка ресурсов
Возвращает:
пучок ресурсов для заданного базового имени и стандартной локали
Исключения:
NullPointerException - если baseName или control является null
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 или locale является null
MissingResourceException - если пучок ресурсов для указанного базового имени не найден

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             Locale targetLocale,
                                             ResourceBundle.Control control)

Возвращает пучок ресурсов, используя указанное базовое имя, целевую локаль и контроллер, а также загрузчик класса вызывающего метода. Вызов этого метода эквивалентен вызову

getBundle(baseName, targetLocale, this.getClass().getClassLoader(),
           control),
за исключением того, что getClassLoader() выполняется с привилегиями безопасности ResourceBundle. См. getBundle для полного описания процесса загрузки пучка ресурсов с ResourceBundle.Control.

Параметры:
baseName - базовое имя пучка ресурсов, полное имя класса
targetLocale - локаль, для которой нужен пучок ресурсов
control - контроллер, предоставляющий информацию для процесса загрузки пучка ресурсов
Возвращает:
пучок ресурсов для заданного базового имени и Locale в locales
Исключения:
NullPointerException - если baseName, locales или control является null
MissingResourceException - если пучок ресурсов для указанного базового имени в любом из locales не найден.
IllegalArgumentException - если заданный control работает неправильно (например, control.getCandidateLocales возвращает null). Обратите внимание, что валидация control выполняется по мере необходимости.
С:
1.6

getBundle

public static ResourceBundle getBundle(String baseName,
                                       Locale locale,
                                       ClassLoader loader)

Получает набор ресурсов, используя указанное базовое имя, локаль и загрузчик классов.

Этот метод работает так же, как вызов getBundle(String, Locale, ClassLoader, Control) с использованием экземпляра по умолчанию ResourceBundle.Control, если другой ResourceBundle.Control не предоставлен с помощью SPI ResourceBundleControlProvider. Обратитесь к описанию изменения поведения по умолчанию.

Ниже описано поведение по умолчанию.

getBundle использует базовое имя, указанную локаль и локаль по умолчанию (полученную из Locale.getDefault), чтобы сгенерировать последовательность имен кандидатных наборов ресурсов. Если язык, сценарий, страна и вариант указанной локали все пусты, то базовое имя является единственным именем кандидата. В противном случае список кандидатных локалей генерируется из атрибутов значений указанной локали (язык, сценарий, страна и вариант) и добавляется к базовому имени. Как правило, это будет выглядеть следующим образом:

baseName + "_" + language + "_" + script + "_" + country + "_" + variant
     baseName + "_" + language + "_" + script + "_" + country
     baseName + "_" + language + "_" + script
     baseName + "_" + language + "_" + country + "_" + variant
     baseName + "_" + language + "_" + country
     baseName + "_" + language

Имена кандидатных наборов ресурсов, где конечный компонент является пустой строкой, опускаются, а также знак подчеркивания. Например, если страна является пустой строкой, второе и пятое имена кандидатных наборов ресурсов выше будут опущены. Также, если сценарий является пустой строкой, имена кандидатов, включающие сценарий, опускаются. Например, локаль с языком «de» и вариантом «JAVA» приведет к именам кандидатов с базовым именем «MyResource» ниже.

MyResource_de__JAVA
     MyResource_de
В случае, если вариант содержит одну или несколько подчеркиваний ('_'), последовательность имен наборов ресурсов, сгенерированных путем обрезания последнего подчеркивания и части, следующей за ним, вставляется после имени кандидата с исходным вариантом. Например, для локали с языком «en», сценарием «Latn», страной «US» и вариантом «WINDOWS_VISTA» и базовым именем набора ресурсов «MyResource», список имен кандидатных наборов ресурсов будет сгенерирован следующим образом:
MyResource_en_Latn_US_WINDOWS_VISTA
 MyResource_en_Latn_US_WINDOWS
 MyResource_en_Latn_US
 MyResource_en_Latn
 MyResource_en_US_WINDOWS_VISTA
 MyResource_en_US_WINDOWS
 MyResource_en_US
 MyResource_en
Note: For some Locales, the list of candidate bundle names contains extra names, or the order of bundle names is slightly modified. See the description of the default implementation of getCandidateLocales for details.

getBundle затем итерируется по именам кандидатных наборов ресурсов, чтобы найти первое, для которого можно создать фактический набор ресурсов. Он использует метод getFormats по умолчанию, который генерирует два имени набора ресурсов для каждого сгенерированного имени, первое — имя класса, а второе — имя файла свойств. Для каждого кандидата имени набора ресурсов он пытается создать набор ресурсов:

  • Сначала он пытается загрузить класс, используя сгенерированное имя класса. Если такой класс можно найти и загрузить с помощью указанного загрузчика классов, он совместим по присваиванию с ResourceBundle, доступен из ResourceBundle и может быть создан, getBundle создает новый экземпляр этого класса и использует его в качестве результата набора ресурсов.
  • В противном случае, getBundle пытается найти файл ресурсов свойств, используя сгенерированное имя файла свойств. Он генерирует имя пути из имени кандидата набора ресурсов, заменяя все символы "." на "/" и добавляя строку ".properties". Он пытается найти "ресурс" с этим именем, используя ClassLoader.getResource. (Обратите внимание, что "ресурс" в смысле getResource не имеет ничего общего с содержимым набора ресурсов, он просто контейнер данных, например, файл.) Если он находит "ресурс", он пытается создать новый экземпляр PropertyResourceBundle из его содержимого. Если это удалось, этот экземпляр становится результатом набора ресурсов.

Это продолжается до тех пор, пока набор ресурсов результата не будет создан или список кандидатов имен наборов ресурсов не будет исчерпан. Если соответствующий набор ресурсов не найден, вызывается метод getFallbackLocale по умолчанию, который возвращает текущую локаль по умолчанию. Новая последовательность имен кандидатных локалей генерируется с использованием этой локали и снова ищется, как указано выше.

Если до сих пор набор ресурсов результата не найден, ищется только базовое имя. Если это по-прежнему не удается, выбрасывается MissingResourceException.

После того, как был найден набор ресурсов результата, его цепочка родительских элементов создается. Если набор ресурсов результата уже имеет родительский элемент (возможно, потому, что он был возвращен из кэша), цепочка завершена.

В противном случае, getBundle проверяет оставшуюся часть списка кандидатных локалей, которая использовалась во время прохода, который сгенерировал набор ресурсов результата. (Как и прежде, имена кандидатных наборов ресурсов, где конечный компонент является пустой строкой, опускаются.) Когда доходит до конца списка кандидатов, он пытается использовать простое имя набора ресурсов. С каждым из имен кандидатных наборов ресурсов он пытается создать набор ресурсов (сначала ищет класс, а затем файл свойств, как описано выше).

Всякий раз, когда это удается, он вызывает метод setParent ранее созданного набора ресурсов с новым набором ресурсов. Это продолжается до тех пор, пока список имен не будет исчерпан или текущий набор уже имеет не-null родительский элемент.

После завершения цепочки родительских элементов набор ресурсов возвращается.

Примечание: getBundle кэширует созданные наборы ресурсов и может возвращать один и тот же экземпляр набора ресурсов несколько раз.

Примечание:Аргумент baseName должен быть полным именем класса. Однако для совместимости с более ранними версиями среды выполнения Java SE Sun не проверяет это, и поэтому можно получить доступ к PropertyResourceBundle указав имя пути (используя "/") вместо полного имени класса (используя ".").

Пример:

Предоставлены следующие классы и файлы свойств:

MyResources.class
     MyResources.properties
     MyResources_fr.properties
     MyResources_fr_CH.class
     MyResources_fr_CH.properties
     MyResources_en.properties
     MyResources_es_ES.class
Содержимое всех файлов является допустимым (то есть, общедоступные неабстрактные подклассы ResourceBundle для файлов ".class", синтаксически правильные файлы ".properties"). Локаль по умолчанию Locale("en", "GB").

Вызов getBundle с аргументами локали ниже приведет к созданию наборов ресурсов следующим образом:

Локаль("fr", "CH") MyResources_fr_CH.class, родитель MyResources_fr.properties, родитель MyResources.class
Локаль("fr", "FR") MyResources_fr.properties, родитель MyResources.class
Локаль("de", "DE") MyResources_en.properties, родитель MyResources.class
Локаль("en", "US") MyResources_en.properties, родитель MyResources.class
Локаль("es", "ES") MyResources_es_ES.class, родитель MyResources.class

Файл MyResources_fr_CH.properties никогда не используется, потому что он скрыт MyResources_fr_CH.class. Аналогично, MyResources.properties также скрыт MyResources.class.

Параметры:
baseName - базовое имя набора ресурсов, полное имя класса
locale - локаль, для которой требуется набор ресурсов
loader - загрузчик классов, из которого загрузить набор ресурсов
Возвращает:
набор ресурсов для заданного базового имени и локали
Исключения:
NullPointerException - если baseName, locale, или loader null
MissingResourceException - если набор ресурсов для указанного базового имени не найден
С:
1.2

getBundle

public static ResourceBundle getBundle(String baseName,
                                       Locale targetLocale,
                                       ClassLoader loader,
                                       ResourceBundle.Control control)

Возвращает набор ресурсов, используя указанное имя базы, целевой язык, загрузчик классов и управление. В отличие от getBundle методов-фабрик без аргумента control, заданный control определяет, как искать и инициализировать наборы ресурсов. Понятийно, процесс загрузки набора с данным control выполняется в следующие шаги.

  1. Этот метод-фабрика ищет набор ресурсов в кэше для указанного baseName, targetLocale и loader. Если запрашиваемый экземпляр набора ресурсов найден в кэше, и срок действия экземпляра и всех его родительских экземпляров не истек, экземпляр возвращается вызывающему методу. В противном случае, этот метод-фабрика продолжает процесс загрузки ниже.
  2. Вызывается метод control.getFormats для получения форматов набора ресурсов для создания имён наборов или ресурсов. Строки "java.class" и "java.properties" обозначают основанные на классах и на основе свойств наборы ресурсов соответственно. Другие строки, начинающиеся с "java.", зарезервированы для будущих расширений и не должны использоваться для форматов, определённых приложением. Другие строки обозначают форматы, определённые приложением.
  3. Вызывается метод control.getCandidateLocales с целевым языком для получения списка кандидатных Locale, для которых ищутся наборы ресурсов.
  4. Вызывается метод control.newBundle для инициализации ResourceBundle для имени базового набора, кандидатного языка и формата. (Обратите внимание на поиск в кэше ниже.) Этот шаг повторяется для всех комбинаций кандидатных языков и форматов до тех пор, пока метод newBundle не вернёт экземпляр ResourceBundle или итерация не исчерпает все комбинации. Например, если кандидатные языки Locale("de", "DE"), Locale("de") и Locale(""), а форматы "java.class" и "java.properties", последовательность комбинаций язык-формат для вызова control.newBundle будет следующей:
    Locale
    format
    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. Если на предыдущем шаге не был найден ни один набор ресурсов, перейдите к шагу 6. Если был найден набор, являющийся базовым набором (набор для Locale("")), и список кандидатных языков содержал только Locale(""), верните набор вызывающему методу. Если был найден набор, являющийся базовым, но список кандидатных языков содержал языки, отличные от Locale(""), задержите набор и перейдите к шагу 6. Если был найден набор, который не является базовым, перейдите к шагу 7.
  6. Вызывается метод control.getFallbackLocale для получения языка по умолчанию (альтернатива текущему целевому языку), чтобы попытаться найти набор ресурсов. Если метод возвращает не-null язык, он становится следующим целевым языком, и процесс загрузки начинается заново с шага 3. В противном случае, если базовый набор был найден и приостановлен на предыдущем шаге 5, он возвращается вызывающему методу. В противном случае, выбрасывается MissingResourceException.
  7. В этот момент мы нашли набор ресурсов, который не является базовым. Если этот набор установил своего родителя во время его инициализации, он возвращается вызывающему методу. В противном случае, его цепь родителей инициализируется на основе списка кандидатных языков, из которого он был найден. Наконец, набор возвращается вызывающему методу.

Во время процесса загрузки набора ресурсов выше, этот метод-фабрика проверяет кэш перед вызовом метода control.newBundle. Если срок действия набора ресурсов, найденного в кэше, истек, метод-фабрика вызывает метод control.needsReload для определения необходимости перезагрузки набора ресурсов. Если перезагрузка необходима, метод-фабрика вызывает control.newBundle для перезагрузки набора ресурсов. Если control.newBundle возвращает null, метод-фабрика помещает поддельный набор ресурсов в кэш как маркер отсутствия наборов ресурсов, чтобы избежать накладных расходов на поиск при последующих запросах. Такие поддельные наборы ресурсов находятся под тем же управлением сроком действия, что и control.

Все загруженные наборы ресурсов кешируются по умолчанию. Подробности см. в control.getTimeToLive.

Ниже приведён пример процесса загрузки набора ресурсов с реализацией ResourceBundle.Control по умолчанию.

Условия:

  • Имя базового набора: foo.bar.Messages
  • Запрашиваемый Locale: Locale.ITALY
  • По умолчанию Locale: Locale.FRENCH
  • Доступные наборы ресурсов: foo/bar/Messages_fr.properties и foo/bar/Messages.properties

Сначала getBundle пытается загрузить набор ресурсов в следующей последовательности.

  • класс foo.bar.Messages_it_IT
  • файл foo/bar/Messages_it_IT.properties
  • класс foo.bar.Messages_it
  • файл foo/bar/Messages_it.properties
  • класс foo.bar.Messages
  • файл foo/bar/Messages.properties

На этом этапе getBundle находит foo/bar/Messages.properties, который приостанавливается, потому что это базовый набор. getBundle вызывает control.getFallbackLocale("foo.bar.Messages", Locale.ITALY), который возвращает Locale.FRENCH. Затем getBundle пытается загрузить набор в следующей последовательности.

  • класс foo.bar.Messages_fr
  • файл foo/bar/Messages_fr.properties
  • класс foo.bar.Messages
  • файл foo/bar/Messages.properties

getBundle находит foo/bar/Messages_fr.properties и создаёт экземпляр ResourceBundle. Затем getBundle устанавливает цепь родителей из списка кандидатных языков. В списке найден только foo/bar/Messages.properties и getBundle создаёт экземпляр ResourceBundle, который становится родителем экземпляра для foo/bar/Messages_fr.properties.

Параметры:
baseName - имя базы набора ресурсов, полное имя класса
targetLocale - язык, для которого требуется набор ресурсов
loader - загрузчик классов для загрузки набора ресурсов
control - управление, предоставляющее информацию для процесса загрузки набора ресурсов
Возвращает:
набор ресурсов для данного имени базы и языка
Исключения:
NullPointerException - если baseName, targetLocale, loader, или control null
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 - если key null

getKeys

public abstract Enumeration<String> getKeys()

Возвращает перечисление ключей.

Возвращает:
перечисление ключей, содержащихся в этом ResourceBundle и его родительских наборах.

containsKey

public boolean containsKey(String key)

Определяет, содержится ли заданный key в этом ResourceBundle или его родительских наборах.

Параметры:
key — ресурс key
Возвращает:
true в случае, если заданный key содержится в этом ResourceBundle или его родительских наборах ресурсов; false в противном случае.
Исключение:
NullPointerException — если key является null
С:
1.6

keySet

public Set<String> keySet()

Возвращает Set всех ключей, содержащихся в этом ResourceBundle и его родительских наборах ресурсов.

Возвращает:
a Set всех ключей, содержащихся в этом ResourceBundle и его родительских наборах ресурсов.
С:
1.6

handleKeySet

protected Set<String> handleKeySet()

Возвращает Set ключей, содержащихся только в этом ResourceBundle.

Реализация по умолчанию возвращает Set ключей, возвращаемых методом getKeys, за исключением тех, для которых метод handleGetObject возвращает null. После создания Set, значение сохраняется в этом ResourceBundle для предотвращения создания одного и того же Set в последующих вызовах. Подклассы могут переопределить этот метод для более быстрого обработки.

Возвращает:
a Set ключей, содержащихся только в этом ResourceBundle
С:
1.6

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API