Spec-Zone.ru › OpenJDK 24

Класс ResourceBundle.Control

java.lang.Object
java.util.ResourceBundle.Control
Вложенный класс:
ResourceBundle
public static class ResourceBundle.Control extends Object
ResourceBundle.Control определяет набор методов обратного вызова, которые вызываются методом ResourceBundle.getBundle во время процесса загрузки ресурсов. Другими словами, ResourceBundle.Control взаимодействует с методами фабрики для загрузки ресурсов. По умолчанию методы обратного вызова предоставляют информацию, необходимую методам фабрики для выполнения стандартного поведения.

ResourceBundle.Control предназначен для приложения, развернутого в безымянном модуле, например, для поддержки ресурсов в нестандартных форматах или упаковки локализованных ресурсов по нетрадиционной схеме. ResourceBundleProvider является заменой для ResourceBundle.Control при миграции на модули. UnsupportedOperationException будет выброшено, когда вызывается метод фабрики, принимающий параметр ResourceBundle.Control.

Помимо методов обратного вызова, методы toBundleName и toResourceName определены в основном для удобства при реализации методов обратного вызова. Однако, метод toBundleName может быть переопределен для предоставления различных схем организации и упаковки локализованных ресурсов. Метод toResourceName служит final, чтобы избежать использования неправильных разделителей имен ресурсов и классов.

Два метода фабрики, getControl(List) и getNoFallbackControl(List), предоставляют ResourceBundle.Control экземпляры, которые реализуют общие вариации стандартного процесса загрузки ресурсов.

Форматы, возвращаемые методом getFormats, и кандидаты на локаль, возвращаемые методом getCandidateLocales, должны быть согласованы во всех ResourceBundle.getBundle вызовах для одного базового набора ресурсов. В противном случае, методы ResourceBundle.getBundle могут вернуть нежелательные ресурсы. Например, если метод getFormats при первом вызове ResourceBundle.getBundle вернет только "java.class", а при втором вызове только "java.properties", то второй вызов вернет уже кэшированные классовые ресурсы.

Экземпляр ResourceBundle.Control должен быть потокобезопасным, если он используется одновременно несколькими потоками. ResourceBundle.getBundle не синхронизирует вызовы методов ResourceBundle.Control. Стандартные реализации методов потокобезопасны.

Приложения могут указать экземпляры ResourceBundle.Control, возвращаемые методами фабрики getControl, или созданные из подкласса ResourceBundle.Control, чтобы настроить процесс загрузки ресурсов. Ниже приведены примеры изменения стандартного процесса загрузки ресурсов.

Пример 1

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

import java.util.*;
import static java.util.ResourceBundle.Control.*;
...
ResourceBundle bundle =
  ResourceBundle.getBundle("MyResources", Locale.forLanguageTag("fr-CH"),
                           ResourceBundle.Control.getControl(FORMAT_PROPERTIES));
Учитывая ресурсы в примере в описании ResourceBundle.getBundle, этот ResourceBundle.getBundle вызов загружает MyResources_fr_CH.properties, родитель которого является MyResources_fr.properties, родитель которого является MyResources.properties. (MyResources_fr_CH.properties не скрыт, но MyResources_fr_CH.class скрыт.)

Пример 2

Следующий пример демонстрирует загрузку ресурсов на основе XML, используя Properties.loadFromXML.

ResourceBundle rb = ResourceBundle.getBundle("Messages",
    new ResourceBundle.Control() {
        public List<String> getFormats(String baseName) {
            if (baseName == null)
                throw new NullPointerException();
            return Arrays.asList("xml");
        }
        public ResourceBundle newBundle(String baseName,
                                        Locale locale,
                                        String format,
                                        ClassLoader loader,
                                        boolean reload)
                         throws IllegalAccessException,
                                InstantiationException,
                                IOException {
            if (baseName == null || locale == null
                  || format == null || loader == null)
                throw new NullPointerException();
            ResourceBundle bundle = null;
            if (format.equals("xml")) {
                String bundleName = toBundleName(baseName, locale);
                String resourceName = toResourceName(bundleName, format);
                InputStream stream = null;
                if (reload) {
                    URL url = loader.getResource(resourceName);
                    if (url != null) {
                        URLConnection connection = url.openConnection();
                        if (connection != null) {
                            // Disable caches to get fresh data for
                            // reloading.
                            connection.setUseCaches(false);
                            stream = connection.getInputStream();
                        }
                    }
                } else {
                    stream = loader.getResourceAsStream(resourceName);
                }
                if (stream != null) {
                    BufferedInputStream bis = new BufferedInputStream(stream);
                    bundle = new XMLResourceBundle(bis);
                    bis.close();
                }
            }
            return bundle;
        }
    });

...

private static class XMLResourceBundle extends ResourceBundle {
    private Properties props;
    XMLResourceBundle(InputStream stream) throws IOException {
        props = new Properties();
        props.loadFromXML(stream);
    }
    protected Object handleGetObject(String key) {
        return props.getProperty(key);
    }
    public Enumeration<String> getKeys() {
        ...
    }
}
Примечание API:
ResourceBundle.Control не поддерживается в именованных модулях. Если метод ResourceBundle.getBundle с параметром ResourceBundle.Control вызывается в именованном модуле, метод будет выбросить исключение UnsupportedOperationException. Любые поставщики сервисов ResourceBundleControlProvider игнорируются в именованных модулях.
С:
1.6
См. также:
  • ResourceBundleProvider

Краткое описание полей

Модификатор и тип Поле Описание
static final List<String> FORMAT_CLASS
Только формат класса List, содержащий "java.class".
static final List<String> FORMAT_DEFAULT
Формат по умолчанию List, который содержит строки "java.class" и "java.properties" в этом порядке.
static final List<String> FORMAT_PROPERTIES
Только формат свойств List, содержащий "java.properties".
static final long TTL_DONT_CACHE
Константа времени жизни для некэширования загруженных экземпляров ресурсов.
static final long TTL_NO_EXPIRATION_CONTROL
Константа времени жизни для отключения контроля истечения срока действия загруженных экземпляров ресурсов в кэше.

Краткое описание конструкторов

Control()
Модификатор Конструктор Описание
protected
Единственный конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
List<Locale> getCandidateLocales(String baseName, Locale locale)
Возвращает List Locale в качестве кандидатов на локаль для baseName и locale.
static final ResourceBundle.Control getControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанный formats.
Locale getFallbackLocale(String baseName, Locale locale)
Возвращает локаль-заглушку для дальнейшего поиска ресурсов методом фабрики ResourceBundle.getBundle.
List<String> getFormats(String baseName)
Возвращает List String, содержащих форматы для загрузки ресурсов для заданного baseName.
static final ResourceBundle.Control getNoFallbackControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанный formats, а метод getFallbackLocale возвращает null.
long getTimeToLive(String baseName, Locale locale)
Возвращает значение времени жизни (TTL) для ресурсов, загруженных с помощью этого ResourceBundle.Control.
boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
Определяет, нужно ли перезагружать истекшие bundle в кэше на основе времени загрузки, указанного в loadTime или других критериях.
ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
Создает экземпляр ресурса для заданного имени ресурса, формата и локали, используя указанный загрузчик классов, если необходимо.
String toBundleName(String baseName, Locale locale)
Преобразует заданное имя baseName и локаль locale в имя ресурса.
final String toResourceName(String bundleName, String suffix)
Преобразует заданное имя bundleName в формат, требуемый методом ClassLoader.getResource, заменяя все вхождения '.' в bundleName на '/', добавляя суффикс '.' и заданный файл suffix.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание полей

FORMAT_DEFAULT

public static final List<String> FORMAT_DEFAULT
Формат по умолчанию List, содержащий строки "java.class" и "java.properties" в указанном порядке. Этот List является неизменяемым.
См. также:
  • getFormats(String)

FORMAT_CLASS

public static final List<String> FORMAT_CLASS
Формат только для класса List, содержащий "java.class". Этот List является неизменяемым.
См. также:
  • getFormats(String)

FORMAT_PROPERTIES

public static final List<String> FORMAT_PROPERTIES
Формат только для свойств List, содержащий "java.properties". Этот List является неизменяемым.
См. также:
  • getFormats(String)

TTL_DONT_CACHE

public static final long TTL_DONT_CACHE
Постоянная времени жизни для отключения кэширования загруженных экземпляров ресурсного набора.
См. также:
  • getTimeToLive(String, Locale)
  • Значения постоянных полей

TTL_NO_EXPIRATION_CONTROL

public static final long TTL_NO_EXPIRATION_CONTROL
Постоянная времени жизни для отключения контроля истечения срока действия для загруженных экземпляров ресурсного набора в кэше.
См. также:
  • getTimeToLive(String, Locale)
  • Значения постоянных полей

Подробное описание конструкторов

Control

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

Подробное описание методов

getControl

public static final ResourceBundle.Control getControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанные formats. formats должен быть равен одному из FORMAT_PROPERTIES, FORMAT_CLASS или FORMAT_DEFAULT. Экземпляры ResourceBundle.Control, возвращаемые этим методом, являются одиночными и потокобезопасными.

Указание FORMAT_DEFAULT эквивалентно созданию экземпляра класса ResourceBundle.Control, за исключением того, что этот метод возвращает одиночный экземпляр.

Параметры:
formats - форматы, которые должны возвращаться методом ResourceBundle.Control.getFormats
Возвращает:
ResourceBundle.Control, поддерживающий указанные formats
Исключения:
NullPointerException - если formats является null
IllegalArgumentException - если formats неизвестен

getNoFallbackControl

public static final ResourceBundle.Control getNoFallbackControl(List<String> formats)
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанные formats, а метод getFallbackLocale возвращает null. formats должен быть равен одному из FORMAT_PROPERTIES, FORMAT_CLASS или FORMAT_DEFAULT. Экземпляры ResourceBundle.Control, возвращаемые этим методом, являются одиночными и потокобезопасными.
Параметры:
formats - форматы, которые должны возвращаться методом ResourceBundle.Control.getFormats
Возвращает:
ResourceBundle.Control, поддерживающий указанные formats без поддержки обратного Locale
Исключения:
NullPointerException - если formats является null
IllegalArgumentException - если formats неизвестен

getFormats

public List<String> getFormats(String baseName)
Возвращает List String, содержащий форматы, используемые для загрузки ресурсных наборов для данного baseName. Фабричный метод ResourceBundle.getBundle пытается загрузить ресурсные наборы с форматами в порядке, указанном в списке. Возвращаемый этим методом список должен содержать по крайней мере один String. Предопределённые форматы — "java.class" для ресурсных наборов на основе класса и "java.properties" для наборов на основе свойств. Строки, начинающиеся с "java.", зарезервированы для будущих расширений и не должны использоваться прикладными форматами.

Не является обязательным возвращать неизменяемый List. Однако возвращаемый List не должен изменяться после возвращения методом getFormats.

Реализация по умолчанию возвращает FORMAT_DEFAULT, чтобы фабричный метод ResourceBundle.getBundle сначала искал ресурсные наборы на основе класса, а затем на основе свойств.

Параметры:
baseName - базовое имя ресурсного набора, полное имя класса
Возвращает:
List String, содержащий форматы для загрузки ресурсных наборов.
Исключения:
NullPointerException - если baseName равно null
См. также:
  • FORMAT_DEFAULT
  • FORMAT_CLASS
  • FORMAT_PROPERTIES

getCandidateLocales

public List<Locale> getCandidateLocales(String baseName, Locale locale)
Возвращает список кандидатов в качестве локалей для поиска ресурсов для baseName и locale. Этот метод вызывается фабричным методом ResourceBundle.getBundle каждый раз, когда фабричный метод пытается найти пакет ресурсов для целевой Locale.

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

Если заданная локаль равна Locale.ROOT (корневая локаль), должен быть возвращён список, содержащий только корневую Locale. В этом случае фабричный метод ResourceBundle.getBundle загружает только базовый пакет в качестве результирующего пакета ресурсов.

Не требуется возвращать неизменяемый (unmodifiable) список. Однако возвращённый список не должен изменяться после возвращения его методом getCandidateLocales.

Реализация по умолчанию возвращает список, содержащий кандидатов по правилам, описанным ниже. В описании ниже, L, S, C и V соответственно представляют непустое значение языка, сценария, страны и варианта. Например, [L, C] представляет локаль, которая имеет значения только для языка и страны. Форма L("xx") означает, что значение языка (непустое) равно "xx". Во всех случаях локали, у которых значения конечного компонента являются пустыми строками, пропускаются.

  1. Для входной локали с пустым значением сценария добавляются кандидатские локали, опуская конечный компонент поочерёдно, как показано ниже:
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  2. Для входной локали с непустым значением сценария добавляются кандидатские локали, опуская конечный компонент до языка, затем добавляются кандидаты, сгенерированные из локали с восстановленными страной и вариантом:
    • [L, S, C, V]
    • [L, S, C]
    • [L, S]
    • [L, C, V]
    • [L, C]
    • [L]
    • Locale.ROOT
  3. Для входной локали с значением варианта, состоящим из нескольких подтегов, разделённых символом нижнего подчеркивания, генерируются кандидатские локали, опуская подтеги варианта по одному, затем вставляются после каждого вхождения подтегов варианта с полным значением варианта в оригинальном списке. Например, если вариант состоит из двух подтегов V1 и V2:
    • [L, S, C, V1, V2]
    • [L, S, C, V1]
    • [L, S, C]
    • [L, S]
    • [L, C, V1, V2]
    • [L, C, V1]
    • [L, C]
    • [L]
    • Locale.ROOT
  4. Специальные случаи для китайского языка. Когда у входной локали язык "zh" (китайский), а значение сценария пустое, может быть предоставлено "Hans" (упрощённый) или "Hant" (традиционный), в зависимости от страны. Когда страна "CN" (Китай) или "SG" (Сингапур), предоставляется "Hans". Когда страна "HK" (Гонконг), "MO" (Макао) или "TW" (Тайвань), предоставляется "Hant". Для всех остальных стран или когда страна пуста, сценарий не предоставляется. Например, для Locale("zh", "CN") , список кандидатов будет:
    • [L("zh"), S("Hans"), C("CN")]
    • [L("zh"), S("Hans")]
    • [L("zh"), C("CN")]
    • [L("zh")]
    • Locale.ROOT
    Для Locale("zh", "TW"), список кандидатов будет:
    • [L("zh"), S("Hant"), C("TW")]
    • [L("zh"), S("Hant")]
    • [L("zh"), C("TW")]
    • [L("zh")]
    • Locale.ROOT
  5. Специальные случаи для норвежского языка. Locale("no", "NO", "NY") и Locale("nn", "NO") представляют норвежский нюнорск. Когда язык локали "nn", генерируется стандартный список кандидатов до [L("nn")], а затем добавляются следующие кандидаты:
    • [L("no"), C("NO"), V("NY")]
    • [L("no"), C("NO")]
    • [L("no")]
    • Locale.ROOT
    Если локаль точно Locale("no", "NO", "NY"), она сначала преобразуется в Locale("nn", "NO"), а затем выполняется вышеописанная процедура.

    Также Java рассматривает язык "no" как синоним норвежского букмоль "nb". Кроме единичного случая Locale("no", "NO", "NY") (обработанного выше), когда у входной локали язык "no" или "nb", кандидатские локали с кодами языка "no" и "nb" чередуются, сначала используя запрошенный язык, затем его синоним. Например, Locale("nb", "NO", "POSIX") генерирует следующий список кандидатов:

    • [L("nb"), C("NO"), V("POSIX")]
    • [L("no"), C("NO"), V("POSIX")]
    • [L("nb"), C("NO")]
    • [L("no"), C("NO")]
    • [L("nb")]
    • [L("no")]
    • Locale.ROOT
    Locale("no", "NO", "POSIX") сгенерирует тот же список, за исключением того, что локали с "no" будут появляться перед соответствующими локали с "nb".

Реализация по умолчанию использует ArrayList, которую переопределяющие реализации могут изменить перед возвращением её вызывающей стороне. Однако подкласс не должен изменять его после возвращения методом getCandidateLocales.

Например, если заданный baseName — "Messages", а заданная locale — Locale("ja", "", "XX"), то возвращается список кандидатов Locale:

     Locale("ja", "", "XX")
     Locale("ja")
     Locale.ROOT
 
. И если пакеты ресурсов для "ja" и "" Locale найдены, то путь поиска ресурсов во время выполнения (цепь предков) —

     Messages_ja -> Messages
 
Parameters:
baseName — основное имя пакета ресурсов, полное имя класса
locale — локаль, для которой требуется пакет ресурсов
Returns:
список кандидатских локалей для заданной locale
Throws:
NullPointerException — если baseName или locale null

getFallbackLocale

public Locale getFallbackLocale(String baseName, Locale locale)
Возвращает локаль, используемую в качестве резервной при дальнейшем поиске пакета ресурсов фабричным методом ResourceBundle.getBundle. Этот метод вызывается из фабричного метода каждый раз, когда ни один пакет ресурсов не был найден для baseName и locale, где локаль является либо параметром для ResourceBundle.getBundle, либо предыдущей резервной локалью, возвращённой этим методом.

Метод возвращает null, если дальнейший поиск по резервным локали не нужен.

Реализация по умолчанию возвращает стандартную локаль, если заданная локаль не является стандартной. В противном случае возвращается null.

Parameters:
baseName — основное имя пакета ресурсов, полное имя класса, для которого ResourceBundle.getBundle не смог найти ни одного пакета ресурсов (кроме базового)
locale — локаль, для которой ResourceBundle.getBundle не смог найти ни одного пакета ресурсов (кроме базового)
Returns:
локаль для резервного поиска, или null, если дальнейший резервный поиск не требуется.
Throws:
NullPointerException — если baseName или locale null

newBundle

public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException
Инициализирует ресурсный пакет для заданного имени пакета, формата и региона, используя заданный загрузчик классов, если необходимо. Этот метод возвращает null, если для заданных параметров нет доступного ресурсного пакета. Если ресурсный пакет не может быть инициализирован из-за непредвиденной ошибки, ошибка должна быть сообщена путём выбрасывания исключения Error или Exception, а не путём простого возвращения null.

Если флаг reload имеет значение true, это указывает на то, что этот метод вызывается, потому что ранее загруженный ресурсный пакет истек.

Требования к реализации:
Ресурсные пакеты в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Ресурсный пакет в именованном модуле, видимом для данного загрузчика классов, доступен, когда пакет файла ресурса, соответствующего ресурсному пакету, открыт безусловно.

По умолчанию реализация инициализирует ResourceBundle следующим образом.

  • Имя пакета получается путём вызова toBundleName(baseName, locale).
  • Если format имеет значение "java.class", класс Class, указанный именем пакета, загружается с помощью заданного загрузчика классов. Если Class найден и доступен, то ResourceBundle инициализируется. Ресурсный пакет доступен, если пакет файла класса пакета открыт безусловно; в противном случае будет брошено исключение IllegalAccessException. Обратите внимание, что флаг reload игнорируется при загрузке ресурсных пакетов, основанных на классах, в этой реализации по умолчанию.
  • Если format имеет значение "java.properties", вызывается toResourceName(bundlename, "properties") для получения имени ресурса. Если reload имеет значение true, вызывается load.getResource для получения URL для создания URLConnection. Этот URLConnection используется для отключения кэширования базовых слоёв загрузки ресурсов и для получения InputStream. В противном случае вызывается loader.getResourceAsStream для получения InputStream. Затем с InputStream конструируется PropertyResourceBundle.
  • Если format ни "java.class", ни "java.properties", выбрасывается исключение IllegalArgumentException.
  • Если язык locale является одним из старых или новых кодов языка, то, при необходимости, процесс загрузки повторяется с именем пакета с другим языком. Например, "iw" для "he" и наоборот.
Параметры:
baseName - базовое имя ресурсного пакета, полное имя класса
locale - регион, для которого должен быть инициализирован ресурсный пакет
format - формат ресурсного пакета для загрузки
loader - используемый ClassLoader для загрузки пакета
reload - флаг, указывающий на перезагрузку пакета; true, если требуется перезагрузка истекшего ресурсного пакета; false в противном случае
Возвращает:
экземпляр ресурсного пакета или null, если такой не найден.
Исключения:
NullPointerException - если bundleName, locale, format или loader имеют значение null или если null возвращено методом toBundleName
IllegalArgumentException - если format неизвестен или если найденный ресурс для заданных параметров содержит некорректные данные.
ClassCastException - если загруженный класс нельзя привести к типу ResourceBundle
IllegalAccessException - если класс или его конструктор без аргументов недоступен.
InstantiationException - если инициализация класса по какой-либо причине завершилась неудачно.
ExceptionInInitializerError - если инициализация, вызванная этим методом, завершилась неудачно.
IOException - если при чтении ресурсов с использованием операций ввода/вывода произошла ошибка.
См. также:
  • ResourceBundleProvider.getBundle(String, Locale)

getTimeToLive

public long getTimeToLive(String baseName, Locale locale)
Возвращает значение времени жизни (TTL) для ресурсных пакетов, загруженных в рамках этого ResourceBundle.Control. Положительные значения времени жизни указывают количество миллисекунд, которое пакет может оставаться в кэше, не проверяясь против исходных данных, из которых он был создан. Значение 0 указывает, что пакет должен проверяться каждый раз при извлечении из кэша. TTL_DONT_CACHE указывает, что загруженные ресурсные пакеты не помещаются в кэш. TTL_NO_EXPIRATION_CONTROL указывает, что загруженные ресурсные пакеты помещаются в кэш без управления сроком действия.

Срок действия влияет только на процесс загрузки пакета методом-фабрикой ResourceBundle.getBundle. То есть, если фабричный метод находит в кэше ресурсный пакет, срок действия которого истек, то фабричный метод вызывает метод needsReload для определения необходимости перезагрузки ресурсного пакета. Если needsReload возвращает значение true, экземпляр кэшированного ресурсного пакета удаляется из кэша. В противном случае экземпляр остаётся в кэше, обновлённый с новым значением TTL, возвращённым этим методом.

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

По умолчанию реализация возвращает TTL_NO_EXPIRATION_CONTROL.

Параметры:
baseName - базовое имя ресурсного пакета, для которого задано значение срока действия.
locale - регион ресурсного пакета, для которого задано значение срока действия.
Возвращает:
время (0 или положительный сдвиг миллисекунд от кэшированного времени) для истечения загруженных пакетов в кэше, TTL_NO_EXPIRATION_CONTROL для отключения управления сроком действия или TTL_DONT_CACHE для отключения кэширования.
Исключения:
NullPointerException - если baseName или locale имеют значение null

needsReload

public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
Определяет, нужно ли перезагрузить истекший bundle в кэше, основываясь на времени загрузки, заданном в loadTime или по другим критериям. Метод возвращает true, если перезагрузка требуется; false в противном случае. loadTime — это смещение в миллисекундах с момента Calendar эпохи.

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

Реализация по умолчанию сравнивает loadTime и время последнего изменения исходных данных ресурсного пакета. Если установлено, что исходные данные изменились после loadTime, возвращается true. В противном случае возвращается false. Эта реализация предполагает, что заданный format — это та же строка, что и его суффикс файла, если это не один из стандартных форматов, "java.class" или "java.properties".

Параметры:
baseName - базовое имя ресурсного пакета, полное имя класса
locale - регион, для которого должен быть инициализирован ресурсный пакет
format - формат ресурсного пакета для загрузки
loader - используемый ClassLoader для загрузки пакета
bundle - экземпляр ресурсного пакета, срок действия которого истек в кэше
loadTime - время, когда bundle был загружен и помещён в кэш
Возвращает:
true, если истекший пакет нужно перезагрузить; false в противном случае.
Исключения:
NullPointerException - если baseName, locale, format, loader или bundle имеют значение null

toBundleName

public String toBundleName(String baseName, Locale locale)
Преобразует заданное baseName и locale в имя пакета ресурсов. Этот метод вызывается из реализации по умолчанию методов newBundle и needsReload.

Данная реализация возвращает следующее значение:

     baseName + "_" + language + "_" + script + "_" + country + "_" + variant
 
, где language, script, country и variant — значения языка, сценария, страны и варианта locale соответственно. Конечные компоненты со значениями, равными пустой строке, опускаются вместе с предшествующим символом '_'. Если значение сценария пустое, то значение сценария опускается вместе с предшествующим символом '_'. Если все значения являются пустыми строками, то возвращается baseName.

Например, если baseName равно "baseName", а locale равно Locale("ja", "", "XX"), то возвращается "baseName_ja_ _XX". Если заданный локализован Locale("en"), то возвращается "baseName_en".

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

Parameters:
baseName - основное имя пакета ресурсов, полное имя класса
locale - локализация, для которой должен загружаться пакет ресурсов
Returns:
имя пакета ресурсов
Throws:
NullPointerException - если baseName или locale равны null
See Also:
  • AbstractResourceBundleProvider.toBundleName(String, Locale)

toResourceName

public final String toResourceName(String bundleName, String suffix)
Преобразует заданное bundleName в формат, необходимый методу ClassLoader.getResource, заменяя все вхождения '.' в bundleName на '/' и добавляя суффикс '.' и заданный тип файла suffix. Например, если bundleName равно "foo.bar.MyResources_ja_JP", а suffix равно "properties", то возвращается "foo/bar/MyResources_ja_JP.properties".
Parameters:
bundleName - имя пакета ресурсов
suffix - суффикс типа файла
Returns:
преобразованное имя ресурса
Throws:
NullPointerException - если bundleName или suffix равны null

© 1993, 2025, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/ResourceBundle.Control.html

Spec-Zone.ru

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