类:国际化服务提供商
国际化的服务提供商启用了与语言环境相关的数据和服务的插件。由于可以插入与语言环境有关的数据和服务,因此第三方能够在java.text
和java.util
包中提供大多数对语言环境敏感的类的实现。
服务是一组编程interface和类,它们提供对特定应用程序功能或特性的访问。服务提供者interface(SPI)是服务定义的一组公共interface和抽象类。服务提供商实现 SPI。服务提供商使您能够创建可扩展的应用程序,您可以在不修改其原始代码库的情况下对其进行扩展。您可以使用新的插件或模块来增强其功能。有关服务提供商和可扩展应用程序的更多信息,请参见创建可扩展的应用程序。
您可以使用服务提供商进行国际化,以提供以下区域设置敏感类的自定义实现:
-
BreakIterator objects
-
Collator objects
-
Locale类的语言代码,国家/地区代码和变体名称
-
timezone名称
-
Currency symbols
-
DateFormat objects
-
DateFormatSymbols objects
-
NumberFormat objects
-
DecimalFormatSymbols objects
相应的 SPI 包含在java.text.spi
和java.util.spi
软件包中:
例如,如果要为新的语言环境提供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
类,而无需对应用程序的源代码进行任何其他更改。