-
- 所有已知实现类:
-
AbstractResourceBundleProvider
public interface ResourceBundleProvider
ResourceBundleProvider
是资源包的服务提供者接口。 它由ResourceBundle.getBundle
工厂方法用于定位和加载通过ServiceLoader
部署为模块的服务提供者。开发资源包服务
给定baseName
的资源包的服务必须具有表单的完全限定类名:<package of baseName> + ".spi." + <simple name of baseName> + "Provider"
spi
子包中,因为它可以打包在与资源包提供者分开的模块中。 例如,名为com.example.app.MyResources
的资源包的服务必须为com.example.app.spi.MyResourcesProvider
:package com.example.app.spi; public interface MyResourcesProvider extends ResourceBundleProvider { }
部署资源包服务提供者
资源包可以部署在模块中的一个或多个服务提供者中。 例如,名为“com.example.app.spi.MyResourcesProvider
”的服务的提供程序具有以下实现类:import com.example.app.spi.MyResourcesProvider; class MyResourcesProviderImpl extends AbstractResourceBundleProvider implements MyResourcesProvider { public MyResourcesProviderImpl() { super("java.properties"); } // this provider maps the resource bundle to per-language package protected String toBundleName(String baseName, Locale locale) { return "p." + locale.getLanguage() + "." + baseName; } public ResourceBundle getBundle(String baseName, Locale locale) { // this module only provides bundles in French if (locale.equals(Locale.FRENCH)) { return super.getBundle(baseName, locale); } // otherwise return null return null; } }
com.example.app.MyResources
”资源包。 传统上,所有语言环境的资源包都与资源包基本名称打包在同一个包中。 当在多个模块和两个包含同名包( split package)的模块中部署资源包时,每个模块中的资源包可以打包在不同的包中,如此示例所示,此提供程序打包资源每个语言包中的捆绑包,即法语区域设置的com.example.app.fr
。提供者可以提供多个服务,每个服务都是不同基本名称的资源包的服务。
AbstractResourceBundleProvider
提供了基本的实施ResourceBundleProvider
和子类可以覆盖toBundleName
方法返回要加载的资源的特定提供者的位置,例如,每个语言的包。 例如,提供程序可以覆盖ResourceBundleProvider.getBundle
方法,以仅搜索已知的受支持语言环境或以其他格式(如XML)返回资源包。此提供程序模块的模块声明指定以下指令:
provides com.example.app.spi.MyResourcesProvider with com.example.impl.MyResourcesProviderImpl;
Obtaining resource bundles from providers
消费者模块的模块声明调用其中一个ResourceBundle.getBundle
工厂方法以从服务提供者获取资源包,必须指定以下指令:uses com.example.app.spi.MyResourcesProvider;
ResourceBundle.getBundle("com.example.app.MyResource", locale)
找到并加载com.example.app.spi.MyResourcesProvider
服务的提供程序,然后调用ResourceBundleProvider.getBundle("com.example.app.MyResource", locale)
以查找给定基本名称和语言环境的资源包。 如果使用者模块是com.example.app.spi.MyResourcesProvider
的资源包服务提供者,则ResourceBundle.getBundle
将仅从服务提供者查找资源包。 否则,ResourceBundle.getBundle
可以根据被调用的ResourceBundle.getBundle
方法的规范继续搜索其他模块和类路径中的资源包。- 从以下版本开始:
- 9
- 另请参见:
-
AbstractResourceBundleProvider
, Resource Bundles and Named Modules ,ServiceLoader
-
-
方法详细信息
-
getBundle
ResourceBundle getBundle(String baseName, Locale locale)
返回给定包名称和语言环境的ResourceBundle
。 该方法返回null
如果没有ResourceBundle
发现给定参数。- 参数
-
baseName
- 资源包的基本包名称,完全限定的类名 -
locale
- 应为其加载资源包的语言环境 - 结果
-
为给定参数创建的ResourceBundle,如果找不到给定参数的
ResourceBundle
,则ResourceBundle
null
-
-