Класс 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.
Пакетная структура реализаций поставщиков локализованных сервисов
Реализации этих локализованных сервисов могут быть доступны, добавив их в путь поиска классов приложения. Поставщик идентифицирует себя с помощью файла конфигурации поставщика в каталоге ресурсов 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() не повлияют на порядок.
Среда выполнения Java предоставляет следующие четыре поставщика локалей:
- "CLDR": Поставщик, основанный на проекте CLDR Консорциума Юникода.
- "COMPAT": представляет локализованные сервисы, совместимые с предыдущими версиями JDK до JDK8 (то же, что и JDK8 "JRE").
- "SPI": представляет локализованные сервисы, реализующие подклассы этого класса
LocaleServiceProvider. - "HOST": Поставщик, отражающий пользовательские настройки в базовой операционной системе. Этот поставщик может быть недоступен в зависимости от реализации среды выполнения Java.
- "JRE": синоним для "COMPAT". Это имя устарело и будет удалено в будущих версиях JDK.
Например, если в свойстве указано:
java.locale.providers=SPI,CLDR,COMPAT, то локализованные сервисы в поставщиках SPI будут искаться в первую очередь. Если нужный локализованный сервис недоступен, среда выполнения ищет CLDR, COMPAT в этом порядке.
По умолчанию порядок поиска предпочтительных поставщиков локалей — "CLDR,COMPAT", поэтому указание "CLDR,COMPAT" идентично поведению по умолчанию. Приложениям, требующим реализаций локализованных сервисов, необходимо явно указать "SPI", чтобы среда выполнения Java загружала их из пути поиска классов.
- С:
- 1.6
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый поставщик сервисов локали. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых этот поставщик локализованных сервисов может предоставить локализованные объекты или имена. |
boolean |
isSupportedLocale |
Возвращает true, если данная locale поддерживается этим поставщиком локализованных сервисов. |
Подробное описание конструкторов
LocaleServiceProvider
protected LocaleServiceProvider()
- Выбрасывает:
-
SecurityException- Если установлен менеджер безопасности и он отклоняетRuntimePermission("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, 2021, 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/17/docs/api/java.base/java/util/spi/LocaleServiceProvider.html