Класс LocaleServiceProvider
- Прямые известные подклассы:
BreakIteratorProvider, CalendarDataProvider, CalendarNameProvider, CollatorProvider, CurrencyNameProvider, DateFormatProvider, DateFormatSymbolsProvider, 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 загружала их из пути классов.
- Примечание по реализации:
- JDK использует данные локали из Общего репозитория данных локалей (CLDR) Консорциума Unicode для реализации API, чувствительных к локали, в пакетах
java.utilиjava.text. Эти данные локали определяют набор локалей, поддерживаемых средой выполнения Java. В следующей таблице перечислены версии CLDR, использованные в каждом выпуске JDK. Если не указано иное, во всех обновлениях одной линейки выпусков JDK используется одна и та же версия CLDR. Обратите внимание, что данные локали CLDR могут изменяться. Не следует полагать, что данные локали остаются одинаковыми в разных версиях CLDR. В противном случае могут возникнуть неожиданные несовместимые изменения поведения, например исключение при разборе даты. Сведения об изменениях между выпусками см. в разделе выпуски CLDR.Выпуск JDK Версия CLDR JDK 25 CLDR 47 JDK 24 CLDR 46 JDK 23 CLDR 45 JDK 22 CLDR 44 JDK 21 CLDR 43 JDK 20 CLDR 42 JDK 19 CLDR 41 JDK 18 CLDR 39 JDK 17 CLDR 39 JDK 16 CLDR 38 JDK 15 CLDR 37 JDK 14 CLDR 36 JDK 13 CLDR 35.1 JDK 12 CLDR 33 JDK 11 CLDR 33 JDK 10 CLDR 29 JDK 9 CLDR 29 JDK 8 CLDR 21.0.1 - Начиная с:
- 1.6
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый поставщик службы локалей. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых этот поставщик службы локалей может предоставлять локализованные объекты или названия. |
boolean |
isSupportedLocale |
Возвращает true, если указанная locale поддерживается этим поставщиком службы локалей. |
Подробное описание конструкторов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/spi/LocaleServiceProvider.html