Spec-Zone.ru › OpenJDK 27

Класс LocaleServiceProvider

java.lang.Object
java.util.spi.LocaleServiceProvider
Прямые известные подклассы:
BreakIteratorProvider, CalendarDataProvider, CalendarNameProvider, CollatorProvider, CurrencyNameProvider, DateFormatProvider, DateFormatSymbolsProvider, DateTimeFormatterPatternProvider, DecimalFormatSymbolsProvider, LocaleNameProvider, NumberFormatProvider, TimeZoneNameProvider
public abstract class LocaleServiceProvider extends Object

Это суперкласс всех интерфейсов поставщиков служб, зависящих от локали (SPI).

Интерфейсы поставщиков служб, зависящие от локали, соответствуют классам, зависящим от локали, в пакетах java.text и java.util и предоставляют данные локали, используемые каждой службой. Эти интерфейсы обеспечивают создание объектов, зависящих от локали, и получение локализованных имен для этих пакетов. Фабричные методы, зависящие от локали, и методы получения имен в пакетах java.text и java.util используют реализации интерфейсов поставщиков, чтобы обеспечить поддержку локалей, выходящих за пределы набора локалей, поддерживаемых самой средой выполнения Java. Поставщики служб, зависящие от локали, развертываются в пути модулей приложения или в пути классов приложения. Чтобы поставщиков можно было найти, они должны быть видны system class loader. Дополнительные сведения о развертывании поставщика службы, зависящей от локали, в качестве модуля или в пути классов см. в разделе Deploying Service Providers.

Упаковка реализаций поставщиков служб, зависящих от локали

Для поставщика службы, зависящей от локали, развернутого в модуле, в объявлении модуля необходимо указать директиву provides. Директива provides указывает как службу, так и поставщика службы.

Например, реализация класса DateFormatProvider, развернутая в виде модуля, может содержать следующую директиву:

    provides java.text.spi.DateFormatProvider with com.example.ExternalDateFormatProvider;

Для поставщика службы локали, развернутого в пути классов, поставщик указывает себя в файле конфигурации поставщика в каталоге ресурсов META-INF/services. Имя файла должно совпадать с полным именем интерфейса поставщика. Файл должен содержать список полных имен конкретных классов поставщиков, по одному на строку. Строка завершается символом перевода строки ('\n'), возврата каретки ('\r') либо последовательностью возврата каретки и непосредственно следующего за ним символа перевода строки. Пробелы и символы табуляции вокруг каждого имени, а также пустые строки игнорируются. Символ комментария — '#' ('#'); на каждой строке игнорируются все символы, следующие за первым символом комментария. Файл должен быть закодирован в UTF-8.

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

Например, реализация класса DateFormatProvider должна иметь вид JAR-файла, содержащего файл:

META-INF/services/java.text.spi.DateFormatProvider
А файл java.text.spi.DateFormatProvider должен содержать строку, например:
com.foo.DateFormatProviderImpl
— полное имя класса, реализующего DateFormatProvider.

Вызов служб, зависящих от локали

Фабричные методы, зависящие от локали, и методы получения имен в пакетах java.text и java.util при необходимости вызывают методы поставщиков служб для поддержки запрошенной локали. Сначала методы проверяют, поддерживает ли запрошенную локаль сама среда выполнения Java, и используют эту поддержку, если она доступна. В противном случае они вызывают методы isSupportedLocale установленных поставщиков соответствующего интерфейса, чтобы найти поставщика, поддерживающего запрошенную локаль. Если такой поставщик найден, вызываются его другие методы для получения запрошенного объекта или имени. При проверке поддержки локали ее расширения по умолчанию игнорируются. (Если расширения локали также следует проверять, необходимо переопределить метод isSupportedLocale). Если ни сама среда выполнения Java, ни установленный поставщик не поддерживают запрошенную локаль, методы перебирают список локалей-кандидатов и повторяют проверку доступности для каждой из них, пока не будет найдено совпадение. Алгоритм формирования списка локалей-кандидатов по умолчанию совпадает с алгоритмом, используемым ResourceBundle (подробности см. в разделе getCandidateLocales). Даже если локаль разрешена из списка кандидатов, методы, возвращающие запрошенные объекты или имена, вызываются с исходной запрошенной локалью, включая расширения Locale. Чтобы гарантировать завершение этого процесса, среда выполнения Java должна поддерживать корневую локаль для всех служб, зависящих от локали.

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

Порядок поиска служб, зависящих от локали, можно настроить с помощью системного свойства java.locale.providers. Это системное свойство задает предпочтительный для пользователя порядок поиска служб, зависящих от локали, разделенных запятыми. Поскольку значение этого свойства считывается и кэшируется только при инициализации данного класса, пользователям следует задавать это свойство в командной строке запуска java. Устанавливать его во время выполнения с помощью System.setProperty(String, String) не рекомендуется, поскольку это может не повлиять на порядок. Эталонная реализация JDK предоставляет следующих трех поставщиков данных локали:

  • "CLDR": поставщик данных локали на основе Общего репозитория данных локалей (CLDR) Консорциума Unicode.
  • "SPI": интерфейс для служб, зависящих от локали, реализованных подклассами этого класса LocaleServiceProvider.
  • "HOST": поставщик данных локали, отражающий пользовательские настройки базовой операционной системы. Этот поставщик может быть недоступен — это зависит от эталонной реализации JDK.

Например, если в свойстве указано следующее:

java.locale.providers=SPI,CLDR
сначала выполняется поиск служб, зависящих от локали, у поставщиков SPI. Если нужная служба, зависящая от локали, недоступна, среда выполнения выполняет поиск у CLDR.

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

Примечание по реализации:
Для реализации API, зависящих от локали, в пакетах java.util и java.text JDK использует данные локали из Общего репозитория данных локалей (CLDR) Консорциума Unicode. Эти данные локали определяют набор локалей, поддерживаемых средой выполнения Java. В следующих таблицах указана версия CLDR, используемая в каждом выпуске JDK. Если не указано иное, во всех выпусках обновлений соответствующей серии выпусков JDK используется одна и та же версия CLDR. Обратите внимание, что данные локали CLDR могут изменяться. Пользователям не следует предполагать, что данные локали остаются неизменными между версиями CLDR. В противном случае может возникнуть неожиданное несовместимое поведение, например исключение при разборе даты. Сведения об изменениях между выпусками см. в разделе Выпуски CLDR.
Выпуски JDK и поддерживаемые версии CLDR
Выпуск JDK Версия CLDR
JDK 27 CLDR 48.2
JDK 25 CLDR 47
JDK 21 CLDR 43
JDK 17 CLDR 39
JDK 11 CLDR 33
JDK 8 CLDR 21.0.1
Показать другие выпуски JDK
Другие выпуски JDK и поддерживаемые версии CLDR
Выпуск JDK Версия CLDR
JDK 26 CLDR 48
JDK 24 CLDR 46
JDK 23 CLDR 45
JDK 22 CLDR 44
JDK 20 CLDR 42
JDK 19 CLDR 41
JDK 18 CLDR 39
JDK 16 CLDR 38
JDK 15 CLDR 37
JDK 14 CLDR 36
JDK 13 CLDR 35.1
JDK 12 CLDR 33
JDK 10 CLDR 29
JDK 9 CLDR 29
Начиная с:
1.6

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

LocaleServiceProvider()
Модификатор Конструктор Описание
protected
Инициализирует новый поставщик службы локали.

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

Модификатор и тип Метод Описание
abstract Locale[] getAvailableLocales()
Возвращает массив всех локалей, для которых этот поставщик службы локали может предоставлять локализованные объекты или имена.
boolean isSupportedLocale(Locale locale)
Возвращает true, если данная locale поддерживается этим поставщиком службы локали.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело и подлежит удалению: этот элемент API может быть удален в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

LocaleServiceProvider

protected LocaleServiceProvider()
Инициализирует новый поставщик службы локали.

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

getAvailableLocales

public abstract Locale[] getAvailableLocales()
Возвращает массив всех локалей, для которых этот поставщик службы локали может предоставлять локализованные объекты или имена. Эта информация используется для формирования значений getAvailableLocales() служб, зависящих от локали, таких как DateFormat.getAvailableLocales().

Массив, возвращаемый этим методом, не должен содержать два или более объекта Locale, различающихся только расширениями.

Возвращает:
массив всех локалей, для которых этот поставщик службы локали может предоставлять локализованные объекты или имена

isSupportedLocale

public boolean isSupportedLocale(Locale locale)
Возвращает true, если данная locale поддерживается этим поставщиком службы локали. Данная locale может содержать расширения, которые следует учитывать при определении поддержки.

Реализация по умолчанию возвращает true, если данная locale равна любой из доступных Locale, возвращаемых методом getAvailableLocales(); при этом все расширения как в данной locale, так и в доступных локалях игнорируются. Конкретные реализации поставщиков служб локали должны переопределять этот метод, если они учитывают расширения Locale. Например, реализации DecimalFormatSymbolsProvider должны проверять расширения в данной locale, чтобы определить, указана ли и поддерживается ли какая-либо система счисления. Однако реализации CollatorProvider могут не зависеть от конкретных систем счисления; в этом случае расширения для систем счисления следует игнорировать.

Параметры:
locale — Locale для проверки
Возвращает:
true, если данная locale поддерживается этим поставщиком; в противном случае — false.
Вызывает исключение:
NullPointerException — если данная locale имеет значение null
Начиная с:
1.8
См. также:
  • Locale.hasExtensions()
  • Locale.stripExtensions()

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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