Класс ResourceBundle.Control
- Внешний класс:
ResourceBundle
public static class ResourceBundle.Control extends Object
ResourceBundle.Control определяет набор методов обратного вызова, которые вызываются фабричными методами ResourceBundle.getBundle в процессе загрузки пакета ресурсов. Иными словами, ResourceBundle.Control взаимодействует с фабричными методами при загрузке пакетов ресурсов. Реализация методов обратного вызова по умолчанию предоставляет информацию, необходимую фабричным методам для выполнения поведения по умолчанию. ResourceBundle.Control предназначен для приложения, развернутого в безымянном модуле, например для поддержки пакетов ресурсов в нестандартных форматах или упаковки локализованных ресурсов в нетрадиционной структуре. ResourceBundleProvider заменяет ResourceBundle.Control при переходе на модули. При вызове фабричного метода, принимающего параметр ResourceBundle.Control, будет выброшено исключение UnsupportedOperationException.
Помимо методов обратного вызова, методы toBundleName и toResourceName определены главным образом для удобства реализации методов обратного вызова. Однако метод toBundleName можно переопределить, чтобы задать другие соглашения по организации и упаковке локализованных ресурсов. Метод toResourceName является final, чтобы избежать использования неправильных разделителей имен ресурсов и классов.
Два фабричных метода — getControl(List) и getNoFallbackControl(List) — предоставляют экземпляры ResourceBundle.Control, реализующие распространенные варианты процесса загрузки пакетов ресурсов по умолчанию.
Форматы, возвращаемые методом getFormats, и локали-кандидаты, возвращаемые методом getCandidateLocales, должны быть согласованы во всех вызовах ResourceBundle.getBundle для одного и того же базового пакета ресурсов. В противном случае методы ResourceBundle.getBundle могут вернуть непредусмотренные пакеты ресурсов. Например, если при первом вызове ResourceBundle.getBundle метод getFormats возвращает только "java.class", а при втором вызове — только "java.properties", то второй вызов вернет вариант на основе класса, кэшированный во время первого вызова.
Экземпляр ResourceBundle.Control должен быть потокобезопасным, если он одновременно используется несколькими потоками. ResourceBundle.getBundle не синхронизирует вызовы методов ResourceBundle.Control. Реализации методов по умолчанию являются потокобезопасными.
Приложения могут указывать экземпляры ResourceBundle.Control, возвращаемые фабричными методами getControl, или созданные на основе подкласса ResourceBundle.Control, чтобы настроить процесс загрузки пакетов ресурсов. Ниже приведены примеры изменения процесса загрузки пакетов ресурсов по умолчанию.
Пример 1
Следующий код позволяет ResourceBundle.getBundle выполнять поиск только ресурсов на основе properties.
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
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final List |
FORMAT_CLASS |
Формат только для классов List, содержащий "java.class". |
static final List |
FORMAT_DEFAULT |
Формат по умолчанию List, содержащий строки "java.class" и "java.properties" именно в таком порядке. |
static final List |
FORMAT_PROPERTIES |
Формат только для properties List, содержащий "java.properties". |
static final long |
TTL_DONT_CACHE |
Константа времени жизни, запрещающая кэширование загруженных экземпляров пакетов ресурсов. |
static final long |
TTL_NO_EXPIRATION_CONTROL |
Константа времени жизни, отключающая управление сроком действия загруженных экземпляров пакетов ресурсов в кэше. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Единственный конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
getCandidateLocales |
Возвращает List объектов Locale в качестве локалей-кандидатов для baseName и locale. |
static final ResourceBundle.Control |
getControl |
|
Locale |
getFallbackLocale |
Возвращает Locale, который фабричный метод ResourceBundle.getBundle будет использовать в качестве резервной локали при дальнейшем поиске пакетов ресурсов. |
List |
getFormats |
Возвращает List объектов String, содержащий форматы, используемые для загрузки пакетов ресурсов для заданного baseName. |
static final ResourceBundle.Control |
getNoFallbackControl |
Возвращает ResourceBundle.Control, в котором метод getFormats возвращает указанный formats, а метод getFallbackLocale возвращает null. |
long |
getTimeToLive |
Возвращает значение времени жизни (TTL) для пакетов ресурсов, загружаемых с помощью этого ResourceBundle.Control. |
boolean |
needsReload |
Определяет, нужно ли перезагружать устаревший bundle в кэше на основании времени загрузки, заданного loadTime, или других критериев. |
ResourceBundle |
newBundle |
Создает экземпляр пакета ресурсов для заданного имени пакета, формата и локали, при необходимости используя заданный загрузчик классов. |
String |
toBundleName |
Преобразует заданные baseName и locale в имя пакета ресурсов. |
final String |
toResourceName |
Преобразует заданное bundleName в форму, необходимую для метода ClassLoader.getResource, заменяя все вхождения '.' в bundleName на '/' и добавляя '.' и заданное имя файла suffix. |
Подробное описание полей
FORMAT_DEFAULT
public static final List<String> FORMAT_DEFAULT
List, содержащий строки "java.class" и "java.properties" именно в таком порядке. Этот List нельзя изменить.- См. также:
FORMAT_CLASS
public static final List<String> FORMAT_CLASS
List, содержащий "java.class". Этот List нельзя изменить.- См. также:
FORMAT_PROPERTIES
public static final List<String> FORMAT_PROPERTIES
List, содержащий "java.properties". Этот List нельзя изменить.- См. также:
TTL_DONT_CACHE
public static final long TTL_DONT_CACHE
- См. также:
TTL_NO_EXPIRATION_CONTROL
public static final long TTL_NO_EXPIRATION_CONTROL
- См. также:
Подробное описание конструкторов
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 - См. также:
getCandidateLocales
public List<Locale> getCandidateLocales(String baseName, Locale locale)
List из Localeов — возможных локалей для baseName и locale. Этот метод вызывается фабричным методом ResourceBundle.getBundle каждый раз, когда фабричный метод пытается найти ресурсный пакет для целевой Locale. Последовательность возможных локалей также соответствует пути поиска ресурсов во время выполнения (также известному как цепочка родителей), если соответствующие ресурсные пакеты для этих локалей существуют и их родители не определены самими загруженными ресурсными пакетами. Последним элементом списка должна быть корневая локаль, если требуется, чтобы базовый пакет был конечным элементом цепочки родителей.
Если заданная локаль равна Locale.ROOT (корневой локали), должен быть возвращён List, содержащий только корневую Locale. В этом случае фабричный метод ResourceBundle.getBundle загружает только базовый пакет в качестве результирующего ресурсного пакета.
Возвращать неизменяемый (модифицировать который нельзя) List не обязательно. Однако возвращённый List нельзя изменять после того, как он был возвращён методом getCandidateLocales.
Реализация по умолчанию возвращает List, содержащий Localeы, сформированные по приведённым ниже правилам. В описании ниже L, S, C и V обозначают соответственно непустые значения языка, скрипта, страны и варианта. Например, [L, C] обозначает Locale, в котором непустыми являются только значения языка и страны. Запись L("xx") означает, что значение языка (непустое) равно "xx". Во всех случаях Localeы, конечные компоненты которых имеют пустые строковые значения, исключаются.
- Для входной
Localeс пустым значением скрипта добавляйте возможныеLocaleы, последовательно опуская конечную компоненту, как показано ниже:- [L, C, V]
- [L, C]
- [L]
-
Locale.ROOT
- Для входной
Localeс непустым значением скрипта добавляйте возможныеLocaleы, последовательно опуская конечные компоненты вплоть до языка, а затем добавьте кандидатов, сформированных изLocaleс восстановленными значениями страны и варианта:- [L, S, C, V]
- [L, S, C]
- [L, S]
- [L, C, V]
- [L, C]
- [L]
-
Locale.ROOT
- Для входной
Localeсо значением варианта, состоящим из нескольких подметок, разделённых символом подчёркивания, сформируйте возможныеLocaleы, последовательно опуская подметки варианта, а затем вставьте их после каждого вхожденияLocaleов с полным значением варианта в исходном списке. Например, если вариант состоит из двух подметок 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
- Особые случаи для китайского языка. Если во входной
Localeуказан язык "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
- Особые случаи для норвежского языка. И
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")(обработанного выше), если во входнойLocaleуказан язык "no" или "nb", возможныеLocaleы с кодами языков "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"), то возвращается List из Localeов:
Locale("ja", "", "XX")
Locale("ja")
Locale.ROOT
. Если найдены ресурсные пакеты для Locale "ja" и "", путь поиска ресурсов во время выполнения (цепочка родителей) будет таким: Messages_ja -> Messages
- Параметры:
-
baseName— базовое имя ресурсного пакета, полное имя класса -
locale— локаль, для которой требуется ресурсный пакет - Возвращает:
ListвозможныхLocaleов для заданнойlocale- Исключения:
-
NullPointerException— еслиbaseNameилиlocaleравенnull
getFallbackLocale
public Locale getFallbackLocale(String baseName, Locale locale)
Locale, используемую в качестве резервной локали при последующих поисках ресурсного пакета фабричным методом ResourceBundle.getBundle. Этот метод вызывается фабричным методом всякий раз, когда результирующий ресурсный пакет не найден для baseName и locale, где локалью является либо параметр ResourceBundle.getBundle, либо предыдущая резервная локаль, возвращённая этим методом. Метод возвращает null, если дальнейший поиск с резервной локалью не требуется.
Реализация по умолчанию возвращает локаль Locale по умолчанию, если заданная locale не является локалью по умолчанию. В противном случае возвращается null.
- Параметры:
-
baseName— базовое имя ресурсного пакета, полное имя класса, для которогоResourceBundle.getBundleне удалось найти ресурсные пакеты (кроме базового пакета) -
locale—Locale, для которойResourceBundle.getBundleне удалось найти ресурсные пакеты (кроме базового пакета) - Возвращает:
Localeдля поиска с резервной локалью илиnull, если дальнейший поиск с резервной локалью не требуется.- Исключения:
-
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. Затем создаётсяPropertyResourceBundleс помощьюInputStream. - Если
formatне равно ни"java.class", ни"java.properties", выбрасываетсяIllegalArgumentException. - Если язык
locale— один из устаревших кодов языков, старый или новый, при необходимости повторяется процесс загрузки с именем пакета, в котором указан другой код языка. Например, "iw" вместо "he" и наоборот.
- Имя пакета получается вызовом метода
- Параметры:
-
baseName— базовое имя ресурсного пакета, полное имя класса -
locale— локаль, для которой следует создать экземпляр ресурсного пакета -
format— формат загружаемого ресурсного пакета -
loader—ClassLoader, используемый для загрузки пакета -
reload— флаг, указывающий на необходимость повторной загрузки пакета;true, если истёк срок действия ресурсного пакета и его нужно загрузить повторно, иначеfalse - Возвращает:
- экземпляр ресурсного пакета или
null, если его не удалось найти. - Исключения:
-
NullPointerException— еслиbundleName,locale,formatилиloaderравенnullлибо если методtoBundleNameвозвращаетnull -
IllegalArgumentException— еслиformatнеизвестен либо найденный для заданных параметров ресурс содержит некорректные данные. -
ClassCastException— если загруженный класс нельзя привести к типуResourceBundle -
IllegalAccessException— если класс или его конструктор без аргументов недоступен. -
InstantiationException— если создание экземпляра класса не удалось по другой причине. -
ExceptionInInitializerError— если инициализация, вызванная этим методом, завершается с ошибкой. -
IOException— если при чтении ресурсов с помощью операций ввода-вывода произошла ошибка - См. также:
getTimeToLive
public long getTimeToLive(String baseName, Locale locale)
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".
Переопределение этого метода позволяет приложениям использовать другие соглашения для организации и упаковки локализованных ресурсов.
- Параметры:
-
baseName— базовое имя ресурсного пакета, полное имя класса -
locale— локаль, для которой следует загрузить ресурсный пакет - Возвращает:
- имя ресурсного пакета
- Исключения:
-
NullPointerException— еслиbaseNameилиlocaleравенnull - См. также:
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".- Параметры:
-
bundleName— имя пакета -
suffix— суффикс типа файла - Возвращает:
- преобразованное имя ресурса
- Исключения:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/ResourceBundle.Control.html