# 区域敏感服务 SPI

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/locale/services.html](https://docs.oracle.com/javase/tutorial/i18n/locale/services.html)

此功能启用与区域设置相关的数据和服务的插件。通过这种方式，第三方能够在`java.text`和`java.util`包中提供大多数区域设置敏感类的实现。

SPI _（服务提供者接口）_ 的实现基于由服务提供者实现的抽象类和 Java 接口。在运行时，Java 类加载机制用于动态定位和加载实现 SPI 的类。

您可以使用区域设置敏感服务 SPI 来提供以下区域设置敏感实现：

*   `BreakIterator`个对象
*   `Collator`个对象
*   `Locale`类的语言代码，国家/地区代码和变体名称
*   时区名称
*   货币符号
*   `DateFormat`个对象
*   `DateFormatSymbol`个对象
*   `NumberFormat`个对象
*   `DecimalFormatSymbols`个对象

相应的 SPI 包含在`java.text.spi`和`java.util.spi`包中：

| `java.util.spi` | `java.text.spi` |
| 

*   `CurrencyNameProvider`
*   `LocaleServiceProvider`
*   `TimeZoneNameProvider`
*   `CalendarDataProvider`

 | 

*   `BreakIteratorProvider`
*   `CollatorProvider`
*   `DateFormatProvider`
*   `DateFormatSymbolsProvider`
*   `DecimalFormatSymbolsProvider`
*   `NumberFormatProvider`

 |

例如，如果要为新语言环境提供`NumberFormat`对象，则必须实现`java.text.spi.NumberFormatProvider`类。您需要扩展此类并实现其方法：

*   `getCurrencyInstance(Locale locale)`
*   `getIntegerInstance(Locale locale)`
*   `getNumberInstance(Locale locale)`
*   `getPercentInstance(Locale locale)`

```
Locale loc = new Locale("da", "DK");
NumberFormat nf = NumberFormatProvider.getNumberInstance(loc);

```

这些方法首先检查 Java 运行时环境是否支持所请求的语言环境;如果是这样，他们会使用这种支持。否则，这些方法调用已安装提供程序的`getAvailableLocales()`方法以获取适当的接口，以查找支持所请求区域设置的提供程序。