# 课程:国际化服务提供商 > 原文: [https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/index.html](https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/index.html) 国际化服务提供商支持依赖于语言环境的数据和服务的插件。由于可以插入与语言环境相关的数据和服务,因此第三方能够在`java.text`和`java.util`包中提供大多数区域设置敏感类的实现。 服务是一组编程接口和类,可以访问特定应用程序的功能或特性。服务提供者接口(SPI)是服务定义的公共接口和抽象类的集合。服务提供商实现 SPI。服务提供程序使您可以创建可扩展的应用程序,您可以在不修改其原始代码库的情况下进行扩展。您可以使用新的插件或模块增强其功能。有关服务提供者和可扩展应用程序的更多信息,请参阅[创建可扩展应用程序](../../ext/basics/spi.html)。 您可以使用服务提供程序进行国际化,以提供以下区域设置敏感类的自定义实现: * [`BreakIterator`](https://docs.oracle.com/javase/8/docs/api/java/text/BreakIterator.html) 对象 * [`Collator`](https://docs.oracle.com/javase/8/docs/api/java/text/Collator.html) 对象 * [`Locale`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html) 类的语言代码,国家/地区代码和变体名称 * 时区名称 * 货币符号 * [`DateFormat`](https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html) 对象 * [`DateFormatSymbols`](https://docs.oracle.com/javase/8/docs/api/java/text/DateFormatSymbols.html) 对象 * [`NumberFormat`](https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html) 对象 * [`DecimalFormatSymbols`](https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormatSymbols.html) 对象 相应的 SPI 包含在`java.text.spi`和`java.util.spi`包中: `java.util.spi`: * [`CurrencyNameProvider`](https://docs.oracle.com/javase/8/docs/api/java/util/spi/CurrencyNameProvider.html) * [`LocaleServiceProvider`](https://docs.oracle.com/javase/8/docs/api/java/util/spi/LocaleServiceProvider.html) * [`TimeZoneNameProvider`](https://docs.oracle.com/javase/8/docs/api/java/util/spi/TimeZoneNameProvider.html) `java.text.spi`: * [`BreakIteratorProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/BreakIteratorProvider.html) * [`CollatorProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/CollatorProvider.html) * [`DateFormatProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/DateFormatProvider.html) * [`DateFormatSymbolsProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/DateFormatSymbolsProvider.html) * [`DecimalFormatSymbolsProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/DecimalFormatSymbolsProvider.html) * [`NumberFormatProvider`](https://docs.oracle.com/javase/8/docs/api/java/text/spi/NumberFormatProvider.html) 例如,如果要为新语言环境提供`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`方法以获取适当的接口,以查找支持所请求区域设置的提供程序。 有关如何使用服务提供程序进行国际化的深入示例,请参阅[将自定义资源包安装为扩展](../../i18n/serviceproviders/resourcebundlecontrolprovider.html)。本节介绍如何实现 [`ResourceBundleControlProvider`](https://docs.oracle.com/javase/8/docs/api/java/util/spi/ResourceBundleControlProvider.html) 接口,使您可以使用任何自定义`ResourceBundle.Control`类,而无需对应用程序的源代码进行任何其他更改。