Класс 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.textJDK использует данные локали из Общего репозитория данных локалей (CLDR) Консорциума Unicode. Эти данные локали определяют набор локалей, поддерживаемых средой выполнения Java. В следующих таблицах указана версия CLDR, используемая в каждом выпуске JDK. Если не указано иное, во всех выпусках обновлений соответствующей серии выпусков JDK используется одна и та же версия CLDR. Обратите внимание, что данные локали CLDR могут изменяться. Пользователям не следует предполагать, что данные локали остаются неизменными между версиями CLDR. В противном случае может возникнуть неожиданное несовместимое поведение, например исключение при разборе даты. Сведения об изменениях между выпусками см. в разделе Выпуски 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 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый поставщик службы локали. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых этот поставщик службы локали может предоставлять локализованные объекты или имена. |
boolean |
isSupportedLocale |
Возвращает true, если данная locale поддерживается этим поставщиком службы локали. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело и подлежит удалению: этот элемент API может быть удален в будущей версии. Финализация устарела и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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
- См. также:
© 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.