Spec-Zone.ru › OpenJDK 21

Класс LocaleServiceProvider

java.lang.Object
java.util.spi.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(String, String), и это может не повлиять на порядок. Реализация JDK предоставляет следующие четыре поставщика локализации:

  • "CLDR": Поставщик, основанный на проекте CLDR Консорциума Юникода CLDR Project.
  • "COMPAT": Представляет локально-чувствительные сервисы, совместимые с предыдущими версиями JDK до JDK 8 (также как «JRE» в JDK 8). Этот поставщик устарел и будет удалён в будущих релизах JDK.
  • "SPI": Представляет локально-чувствительные сервисы, реализующие подклассы этого класса LocaleServiceProvider.
  • "HOST": Поставщик, отражающий пользовательские настройки в базовой операционной системе. Этот поставщик может быть недоступен в зависимости от реализации JDK.
  • "JRE": синоним для "COMPAT". Это имя устарело и будет удалено в будущих выпусках JDK.

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

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

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

С тех пор:
1.6

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

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

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

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

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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
См. также:
  • Locale.hasExtensions()
  • Locale.stripExtensions()

© 1993, 2023, 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/21/docs/api/java.base/java/util/spi/LocaleServiceProvider.html

Spec-Zone.ru

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