Класс 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 Reference предоставляет следующие три поставщика данных локали:
- "CLDR": Поставщик данных локали, основанный на общем репозитории данных локали (CLDR) Консорциума Юникода .
- "SPI": представляет собой чувствительные к локали службы, реализующие подклассы этого класса
LocaleServiceProvider. - "HOST": Поставщик данных локали, отражающий пользовательские настройки в основной операционной системе. Этот поставщик может быть недоступен в зависимости от реализации JDK Reference.
Например, если в свойстве указано следующее:
java.locale.providers=SPI,CLDR, то службы, чувствительные к локали, в поставщиках SPI, будут просматриваться в первую очередь. Если нужная чувствительная к локали служба недоступна, среда выполнения ищет CLDR.
По умолчанию для поиска предпочтительных поставщиков данных локали используется "CLDR", поэтому указание только "CLDR" идентично поведению по умолчанию. Приложения, которым требуются реализации служб, чувствительных к локали, должны явно указать "SPI", чтобы среда выполнения Java загрузила их из пути класса.
- Примечание реализации:
- JDK использует данные локали из общего репозитория данных локали (CLDR) Консорциума Юникода для реализации чувствительных к локали API в пакетах
java.utilиjava.text. Эти данные локали определяют набор локалей, поддерживаемых средой выполнения Java. В следующей таблице приведены версии CLDR, используемые в каждом выпуске JDK. За исключением указанных случаев, все обновления в рамках конкретной версии JDK используют одну и ту же версию CLDR. Обратите внимание, что данные локали CLDR могут изменяться. Пользователи не должны предполагать, что данные локали останутся неизменными между версиями CLDR. В противном случае могут возникнуть неожиданные несовместимые проблемы, например, исключение при разборе даты. См. Выпуски CLDR для получения различий между выпусками.Выпуск JDK Версия CLDR 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, так и в доступных локалях. Конкретные реализации поставщиков служб локализации должны переопределять этот метод, если эти реализации поддерживают расширения. Например, реализации 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/spi/LocaleServiceProvider.html