类:国际化服务提供商

国际化的服务提供商启用了与语言环境相关的数据和服务的插件。由于可以插入与语言环境有关的数据和服务,因此第三方能够在java.textjava.util包中提供大多数对语言环境敏感的类的实现。

服务是一组编程interface和类,它们提供对特定应用程序功能或特性的访问。服务提供者interface(SPI)是服务定义的一组公共interface和抽象类。服务提供商实现 SPI。服务提供商使您能够创建可扩展的应用程序,您可以在不修改其原始代码库的情况下对其进行扩展。您可以使用新的插件或模块来增强其功能。有关服务提供商和可扩展应用程序的更多信息,请参见创建可扩展的应用程序

您可以使用服务提供商进行国际化,以提供以下区域设置敏感类的自定义实现:

相应的 SPI 包含在java.text.spijava.util.spi软件包中:

java.util.spijava.text.spi
CurrencyNameProvider

LocaleServiceProvider
TimeZoneNameProvider
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 运行时环境是否支持请求的语言环境。如果是这样,该方法将使用该支持。否则,这些方法将为适当的interface调用已安装的提供程序的getAvailableLocales方法,以查找支持所请求的语言环境的提供程序。

有关如何使用服务提供商进行国际化的深入示例,请参见安装自定义资源包作为扩展。本节向您展示如何实现ResourceBundleControlProviderinterface,该interface使您可以使用任何自定义ResourceBundle.Control类,而无需对应用程序的源代码进行任何其他更改。