Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
国际化服务提供者支持依赖于语言环境的数据和服务的插件。因为可以插入依赖于语言环境的数据和服务,所以第三方能够在 java.text
和 java.util
包中提供大多数语言环境敏感类的实现。
服务是一组编程接口和类,可以访问特定应用程序的功能或特性。服务提供者接口(SPI)是服务定义的公共接口和抽象类的集合。服务提供者实现 SPI。服务提供者使你可以创建可扩展的应用程序,你可以在不修改其原始代码源的情况下进行扩展。你可以使用新的插件或模块增强其功能。有关服务提供者和可扩展应用程序的更多信息,请参阅 Creating Extensible Applications。
你可以使用服务者进行国际化,以提供以下语言环境敏感类的自定义实现:
BreakIterator
对象Collator
对象Locale
类的语言代码,国家/地区代码和变体名称DateFormat
对象DateFormatSymbols
对象NumberFormat
对象DecimalFormatSymbols
对象相应的 SPI 包含在 java.text.spi
和 java.util.spi
包中:
java.util.spi |
java.text.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 运行时环境是否支持所请求的语言环境;如果是这样,方法使用该支持。否则,这些方法会调用已安装提供程序的 getAvailableLocales
方法,以找到支持所请求语言环境的提供程序。
有关如何使用服务提供程序进行国际化的深入示例,请参阅 Installing a Custom Resource Bundle as an Extension。本节介绍如何实现 ResourceBundleControlProvider
接口,该接口允许你使用任何自定义 ResourceBundle.Control
类,而无需对源进行任何其他更改你的应用代码。