|
Spec-Zone .ru
спецификации, руководства, описания, API
|
public static class ResourceBundle.Control extends Object
ResourceBundle.Control определяет ряд методов обратного вызова, которые вызываются ResourceBundle.getBundle методы фабрики во время процесса загрузки пакета. Другими словами, a ResourceBundle.Control сотрудничает с методами фабрики для того, чтобы загрузить пакеты ресурса. Реализация по умолчанию методов обратного вызова предоставляет информацию, необходимую для методов фабрики, чтобы выполнить поведение значения по умолчанию. В дополнение к методам обратного вызова, toBundleName и toResourceName методы определяются прежде всего для удобства в реализации методов обратного вызова. Однако, toBundleName метод мог быть переопределен, чтобы обеспечить различные соглашения в организации и упаковке локализованных ресурсов. toResourceName метод final чтобы избежать использования неправильного ресурса и class называют разделители.
Два метода фабрики, getControl(List) и getNoFallbackControl(List), обеспечить ResourceBundle.Control экземпляры, которые реализуют общие изменения значения по умолчанию, связывают процесс загрузки.
Форматы, возвращенные getFormats метод и локали кандидата, возвращенные getCandidateLocales метод должен быть непротиворечивым всего ResourceBundle.getBundle вызовы для того же самого основного пакета. Иначе, ResourceBundle.getBundle методы могут возвратить непреднамеренные пакеты. Например, если только "java.class" возвращается getFormats метод для первого звонка ResourceBundle.getBundle и только "java.properties" для второго вызова тогда второй вызов возвратит class на основе, который кэшировался во время первого вызова.
A 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", new Locale("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() {
...
}
}
| Модификатор и Тип | Поле и Описание |
|---|---|
static List<String> |
FORMAT_CLASS
class - только форматирует
List содержа "java.class". |
static List<String> |
FORMAT_DEFAULT
Формат значения по умолчанию
List, который содержит строки "java.class" и "java.properties", в этом порядке. |
static List<String> |
FORMAT_PROPERTIES
Формат только для свойств
List содержа "java.properties". |
static long |
TTL_DONT_CACHE
Время-к-живому, постоянное для того, чтобы не кэшировать загруженный ресурс, связывает экземпляры.
|
static long |
TTL_NO_EXPIRATION_CONTROL
Время-к-живому, постоянное для того, чтобы запретить управление истечением для загруженного ресурса, связывает экземпляры в кэше.
|
| Модификатор | Конструктор и Описание |
|---|---|
protected |
ResourceBundle.Control()
Единственный конструктор.
|
| Модификатор и Тип | Метод и Описание |
|---|---|
List<Locale> |
getCandidateLocales(String baseName, Locale locale)
Возвраты a
List из Locales как локали кандидата для baseName и locale. |
static ResourceBundle.Control |
getControl(List<String> formats)
|
Локаль |
getFallbackLocale(String baseName, Locale locale)
Возвраты a
Locale чтобы использоваться в качестве локали нейтрализации для дальнейшего ресурса связывают поискы ResourceBundle.getBundle метод фабрики. |
List<String> |
getFormats(String baseName)
Возвраты a
List из Strings содержащий форматы, которые будут использоваться, чтобы загрузить пакеты ресурса для данного baseName. |
static ResourceBundle.Control |
getNoFallbackControl(List<String> formats)
Возвраты a
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)
Инстанцирует пакета ресурса для данного имени пакета данного формата и локали, используя данный загрузчик class в случае необходимости.
|
Строка |
toBundleName(String baseName, Locale locale)
Преобразовывает данный
baseName и locale к имени пакета. |
Строка |
toResourceName(String bundleName, String suffix)
Преобразовывает данный
bundleName к форме, требуемой ClassLoader.getResource метод, заменяя все возникновения '.' в bundleName с '/' и добавление a '.' и данный файл suffix. |
public static final List<String> FORMAT_DEFAULT
List, который содержит строки "java.class" и "java.properties", в этом порядке. Это List является неподдающимся изменению.getFormats(String)public static final List<String> FORMAT_CLASS
getFormats(String)public static final List<String> FORMAT_PROPERTIES
List содержа "java.properties". Это List является неподдающимся изменению.getFormats(String)public static final long TTL_DONT_CACHE
public static final long TTL_NO_EXPIRATION_CONTROL
protected ResourceBundle.Control()
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 class, за исключением того, что этот метод возвращает одиночный элемент.
formats - форматы, которые будут возвращены ResourceBundle.Control.getFormats методResourceBundle.Control поддержка указанного formatsNullPointerException - если formats nullIllegalArgumentException - если formats неизвестно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 nullIllegalArgumentException - если formats неизвестноpublic List<String> getFormats(String baseName)
List из Strings содержащий форматы, которые будут использоваться, чтобы загрузить пакеты ресурса для данного baseName. ResourceBundle.getBundle метод фабрики пытается загрузить пакеты ресурса форматами в порядке, определенном списком. У списка, возвращенного этим методом, должен быть по крайней мере один String. Предопределенные форматы "java.class" для class на основе ресурс связывается и "java.properties" для основанных на свойствах. Строки, запускающиеся с "java." резервируются для будущих расширений и не должен использоваться определенными с помощью приложения форматами. Это не требование, чтобы возвратить (неподдающееся изменению) неизменное List. Однако, возвращенный List не должен быть видоизменен после того, как это было возвращено getFormats.
Возвраты реализации по умолчанию FORMAT_DEFAULT так, чтобы ResourceBundle.getBundle метод фабрики ищет первый class на основе пакеты ресурса, тогда основанные на свойствах.
baseName - базовое имя пакета ресурса, полностью определенного имени classList из Strings содержащий форматы для того, чтобы загрузить пакеты ресурса.NullPointerException - если baseName нульFORMAT_DEFAULT, FORMAT_CLASS, FORMAT_PROPERTIESpublic List<Locale> getCandidateLocales(String baseName, Locale locale)
List из Locales как локали кандидата для baseName и locale. Этот метод вызывают ResourceBundle.getBundle метод фабрики каждый раз метод фабрики пытается найти пакет ресурса для цели Locale. Последовательность локалей кандидата также соответствует пути поиска ресурса времени выполнения (также известный как родительская цепочка), если соответствующие пакеты ресурса для локалей кандидата существуют, и их родители не определяются загруженными пакетами ресурса непосредственно. Последний элемент списка должен быть корневой локалью, если это требуется, чтобы иметь основной пакет как терминал родительской цепочки.
Если данная локаль равна Locale.ROOT (корневая локаль), a List содержа только корень Locale должен быть возвращен. В этом случае, ResourceBundle.getBundle метод фабрики загружает только основной пакет как получающийся пакет ресурса.
Это не требование, чтобы возвратить (неподдающееся изменению) неизменное List. Однако, возвращенный List не должен быть видоизменен после того, как это было возвращено getCandidateLocales.
Реализация по умолчанию возвращает a List содержа Locales использование правил, описанных ниже. В описании ниже, L, S, C и V соответственно представляют непустой язык, сценарий, страну, и разновидность. Например, [L, C] представляет a Locale у этого есть непустые значения только для языка и страны. Форма L ("xx") представляет (непустое) значение языка, "xx". Для всех случаев, Locales, чьи заключительные компонентные значения являются пустыми строками, опускаются.
Locale с пустым значением сценария добавьте кандидата Locales, опуская заключительный компонент один за другим как указано ниже: Locale.ROOT
Locale с непустым значением сценария добавьте кандидата Locales, опуская заключительный компонент до языка, затем добавьте кандидатов, сгенерированных от Locale со страной и разновидностью восстановил: Locale.ROOT
Locale с различным значением, состоящим из многократных подтегов, разделенных подчеркиванием, генерируйте кандидата Locales, опуская различные подтеги один за другим, затем вставьте их после каждого происшествия Locales с полным различным значением в исходном списке. Например, если разновидность состоит из двух подтегов V1 и V2: Locale.ROOT
Locale имеет язык "zh" (китайский язык) и пустое значение сценария, или (Упрощенный) "Ганс" или (Традиционный) "Hant" могли бы быть предоставлены, в зависимости от страны. Когда страна является "CN" (Китай) или "SG" (Сингапур), "Ганс" предоставляется. Когда страной является "HK" (Гонконгский SAR Китай), "MO" (SAR Макао Китай), или "ТВТ" (Тайвань), "Hant" предоставляется. Для всех других стран или когда страна пуста, не предоставляется никакой сценарий. Например, для Locale("zh", "CN") , список кандидатов будет: Locale.ROOT
Locale("zh", "TW"), список кандидатов будет: Locale.ROOT
Locale("no", "NO", "NY") и Locale("nn", "NO") представьте норвежский Nynorsk. Когда язык локали является "nn", стандартный список кандидатов сгенерирован до [L ("nn")], и затем следующие кандидаты добавляются: Locale.ROOT
Locale("no", "NO", "NY"), это сначала преобразовывается в Locale("nn", "NO") и затем вышеупомянутая процедура сопровождается. Кроме того, Java обрабатывает язык "нет" как синоним норвежского Bokmål "nb". За исключением единственного случая Locale("no", "NO", "NY") (обработанный выше), когда ввод Locale имеет язык "нет" или "nb", кандидат Locales с языком кодируют "нет", и "nb" чередуются, сначала используя требуемый язык, затем используя его синоним. Например, Locale("nb", "NO", "POSIX") генерирует следующий список кандидатов:
Locale.ROOT
Locale("no", "NO", "POSIX") генерировал бы тот же самый список за исключением того, что локали с "нет" появятся перед соответствующими локалями с "nb".Реализация по умолчанию использует ArrayList то переопределение реализации может изменить прежде, чем возвратить это вызывающей стороне. Однако, подкласс не должен изменить это после того, как это было возвращено getCandidateLocales.
Например, если данный baseName "сообщения" и данный locale Locale("ja", "", "XX"), тогда a List из Locales:
Locale("ja", "", "XX")
Locale("ja")
Locale.ROOT
возвращается. И если ресурс связывается для "ja" и"" Locales находятся, тогда путь поиска ресурса времени выполнения (родительская цепочка):
Messages_ja -> Messages
baseName - базовое имя пакета ресурса, полностью определенного имени classlocale - локаль, для которой требуется пакет ресурсаList из кандидата Locales для данного localeNullPointerException - если baseName или locale nullpublic Locale getFallbackLocale(String baseName, Locale locale)
Locale чтобы использоваться в качестве локали нейтрализации для дальнейшего ресурса связывают поискы ResourceBundle.getBundle метод фабрики. Этот метод вызывают от метода фабрики каждый раз, когда никакой получающийся пакет ресурса не был найден для baseName и locale, где локаль является любой параметром для ResourceBundle.getBundle или предыдущая локаль нейтрализации возвратилась этим методом. Возвраты метода null если никакой дальнейший поиск нейтрализации не требуется.
Реализация по умолчанию возвращает значение по умолчанию Locale если данный locale не значение по умолчанию один. Иначе, null возвращается.
baseName - базовое имя то, пакета ресурса, полностью определенного имени class, для который ResourceBundle.getBundle было неспособно найти любые пакеты ресурса (за исключением основного пакета)locale - Locale для которого ResourceBundle.getBundle было неспособно найти любые пакеты ресурса (за исключением основного пакета)Locale для поиска нейтрализации, или null если никакой дальнейший поиск нейтрализации не требуется.NullPointerException - если baseName или locale nullpublic ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException
null если нет никакого пакета ресурса, доступного для данных параметров. Если пакет ресурса нельзя инстанцировать из-за неожиданной ошибки, об ошибке нужно сообщить, бросая Error или Exception вместо простого возврата null. Если reload флаг true, это указывает, что этот метод вызывают, потому что ранее загруженный пакет ресурса истек.
Реализация по умолчанию инстанцирует a ResourceBundle следующим образом.
toBundleName(baseName, locale).format "java.class", Class определенный именем пакета загружается, вызывая ClassLoader.loadClass(String). Затем, a ResourceBundle инстанцируется, вызывая Class.newInstance(). Отметьте что reload флаг игнорируется для того, чтобы загрузить class на основе пакеты ресурса в этой реализации по умолчанию.format "java.properties", toResourceName(bundlename, "properties") вызывается, чтобы получить имя ресурса. Если reload true, load.getResource вызывается, чтобы получить a URL для того, чтобы создать a URLConnection. Это URLConnection используется, чтобы отключить кэши базовых уровней загрузки ресурса, и добраться InputStream. Иначе, loader.getResourceAsStream вызывается, чтобы добраться InputStream. Затем, a PropertyResourceBundle создается с InputStream.format ни один не "java.class" ни "java.properties", IllegalArgumentException бросается.baseName - основное имя пакета пакета ресурса, полностью определенное имя classlocale - локаль, для которой нужно инстанцировать пакет ресурсаformat - пакет ресурса форматирует, чтобы быть загруженнымloader - ClassLoader использовать, чтобы загрузить пакетreload - флаг, чтобы указать на перезагрузку пакета; true перезагружая пакет ресурса с истекшим сроком, false иначеnull если ни один не мог бы быть найден.NullPointerException - если bundleName, locale, format, или loader null, или если null возвращается toBundleNameIllegalArgumentException - если format неизвестно, или если ресурс, найденный для данных параметров, содержит некорректные данные.ClassCastException - если загруженный class не может быть брошен к ResourceBundleIllegalAccessException - если class или его nullary конструктор не доступны.InstantiationException - если инстанцирование class перестало работать по некоторой другой причине.ExceptionInInitializerError - если инициализация вызывается этим методом сбои.SecurityException - Если менеджер безопасности присутствует, и создание новых экземпляров отрицается. См. Class.newInstance() для деталей.IOException - если ошибка произошла, читая ресурсы, используя какие-либо операции ввода-вывода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 - локаль ресурса связывается, для которого определяется значение истечения.TTL_NO_EXPIRATION_CONTROL отключить управление истечением, или TTL_DONT_CACHE отключить кэширование.NullPointerException - если baseName или locale nullpublic 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 - основное имя пакета пакета ресурса, полностью определенное имя classlocale - локаль, для которой нужно инстанцировать пакет ресурсаformat - пакет ресурса форматирует, чтобы быть загруженнымloader - ClassLoader использовать, чтобы загрузить пакетbundle - экземпляр пакета ресурса, который истекся в кэшеloadTime - время, когда bundle был загружен и вставил кэшtrue если пакет с истекшим сроком должен быть перезагружен; false иначе.NullPointerException - если baseName, locale, format, loader, или bundle nullpublic String toBundleName(String baseName, Locale locale)
baseName и locale к имени пакета. Этот метод вызывают от реализации по умолчанию newBundle и needsReload методы. Эта реализация возвращает следующее значение:
baseName + "_" + language + "_" + script + "_" + country + "_" + variant
где language, script, country, и variant язык, сценарий, страна, и различные значения locale, соответственно. Заключительные компонентные значения, которые являются пустыми Строками, опускаются наряду с предыдущим '_'. Когда сценарий пуст, значение сценария является ommitted наряду с предыдущим '_'. Если все значения являются пустыми строками, то baseName возвращается. Например, если baseName "baseName" и locale Locale("ja", "", "XX"), тогда "baseName_ja_ _XX" возвращается. Если данная локаль Locale("en"), тогда "baseName_en" возвращается.
Переопределение этого метода позволяет приложениям использовать различные соглашения в организации и упаковке локализованных ресурсов.
baseName - базовое имя пакета ресурса, полностью определенного имени classlocale - локаль, для которой должен быть загружен пакет ресурсаNullPointerException - если baseName или locale nullpublic final String toResourceName(String bundleName, String suffix)
bundleName к форме, требуемой ClassLoader.getResource метод, заменяя все возникновения '.' в bundleName с '/' и добавление a '.' и данный файл suffix. Например, если bundleName "foo.bar.MyResources_ja_JP" и suffix "properties", тогда "foo/bar/MyResources_ja_JP.properties" возвращается.bundleName - имя пакетаsuffix - суффикс типа файлаNullPointerException - если bundleName или suffix null
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92