所有类


java.util
类 ResourceBundle

java.lang.Object
  继承者 java.util.ResourceBundle
直接已知子类:
ListResourceBundle, PropertyResourceBundle

public abstract class ResourceBundle
   
   
   
   
   
extends Object

资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包中装入它。以这种方式可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(如果不是全部)特定于语言环境的信息隔离开来。

这就使您所编写的程序可以:

  • 轻松地本地化或翻译成不同的语言
  • 一次处理多个语言环境
  • 以后可以轻松地进行修改,支持更多的语言环境

资源包属于这样的系列,其成员共享一个公共的基本名称,但是名称中还有标识其语言环境的其他组件。例如,某个资源包系列的基本名称可能是 "MyResources"。该系列应该有一个默认资源包,其名称与其系列名相同( "MyResources"),并且如果不支持指定的语言环境,则此资源包应该用作最后的手段。然后,此系列可根据需要提供特定于语言环境的成员,例如一个名为 "MyResources_de" 的德语资源包。

某个系列中的每个资源包都包含相同的项,但是已经针对该资源包所代表的语言环境翻译了各项。例如,"MyResources" 和 "MyResources_de" 可能有用在取消操作按钮上的 String。在 "MyResources" 中,String 可能含有 "Cancel",而在 "MyResources_de" 中则可能含有 "Abbrechen"。

如果不同的国家/地区有不同的资源,则可以进行限定:例如,"MyResources_de_CH" 是瑞士 (CH) 中包含德语 (de) 的对象。如果只想修改限定中的某些资源,就可以这样做。

当程序需要特定于语言环境的对象时,它使用 getBundle 方法加载 ResourceBundle 类:

 ResourceBundle myResources =
      ResourceBundle.getBundle("MyResources", currentLocale);
 

资源包包含键/值对。键惟一地标识了包中的特定于语言环境的对象。下面是一个 ListResourceBundle 示例,它包含了两个键/值对:

public class MyResources extends ListResourceBundle {
      public Object[][] getContents() {
              return contents;
      }
      static final Object[][] contents = {
      // LOCALIZE THIS
              {"OkKey", "OK"},
              {"CancelKey", "Cancel"},
      // END OF MATERIAL TO LOCALIZE
      };
 }
 
键始终为 String 类型。在此示例中,两个键是 "OkKey" 和 "CancelKey"。在上面的示例中,值也是 String 类型,即 "OK" 和 "Cancel",但并非必须如此。值可以是任意对象类型。

可以使用适当的 getter 方法从资源包中检索某个对象。因为 "OkKey" 和 "CancelKey" 都是字符串,所以应该使用 getString 来检索它们:

 button1 = new Button(myResources.getString("OkKey"));
 button2 = new Button(myResources.getString("CancelKey")); 
 
所有 getter 方法都需要的是将键作为参数并返回对象(如果找到的话)。如果未找到对象,则 getter 方法会抛出 MissingResourceException

除了 getString,ResourceBundle 还提供了获取字符串数组的方法 getStringArray,以及用于其他任意对象类型的 getObject 方法。使用 getObject 时,必须将结果强制转换为适当的类型。例如:

 int[] myIntegers = (int[]) myResources.getObject("intList");
 

Java 2 平台提供了两个 ResourceBundle 的子类,即 ListResourceBundlePropertyResourceBundle,这为创建资源提供了一种相当简单的方式。正如在前面示例中所看到的,ListResourceBundle 以键/值对的列表方式管理其资源。PropertyResourceBundle 则使用一个属性文件来管理其资源。

如果 ListResourceBundlePropertyResourceBundle 无法满足您的需求,那么可以编写自己的 ResourceBundle 子类。子类必须重写这两个方法:handleGetObjectgetKeys()

下面是一个极其简单的 ResourceBundle 子类示例——MyResources,它管理两个资源(对于大量的资源,可能应该使用 Hashtable)。注意,如果某个“父级”ResourceBundle 处理具有相同值的相同键(如下面的 okKey),则无需提供值。

示例:

 // default (English language, United States)
 public class MyResources extends ResourceBundle {
     public Object handleGetObject(String key) {
         if (key.equals("okKey")) return "Ok";
         if (key.equals("cancelKey")) return "Cancel";
         return null;
     }
 }

 // German language
 public class MyResources_de extends MyResources {
     public Object handleGetObject(String key) {
         // don't need okKey, since parent level handles it.
         if (key.equals("cancelKey")) return "Abbrechen";
         return null;
     }
 }
 
不必限制只使用 ResourceBundle 的单个系列。例如,可以有异常消息 ExceptionResources 的包集合(ExceptionResources_frExceptionResources_de 等)和窗口小部件 WidgetResource 的包集合(WidgetResources_frWidgetResources_de 等);可以按自己喜欢的方式分解资源。

从以下版本开始:
JDK1.1
另请参见:
ListResourceBundle, PropertyResourceBundle, MissingResourceException

字段摘要
protected  ResourceBundle parent
          此包的父包。
 
构造方法摘要
ResourceBundle()
          单独的构造方法(由子类构造方法调用,通常是隐式的)。
 
方法摘要
static ResourceBundle getBundle(String baseName)
          使用指定的基本名称、默认的语言环境和调用方的类加载器获取资源包。
static ResourceBundle getBundle(String baseName, Locale locale)
          使用指定的基本名称和语言环境,以及调用方的类加载器获取资源包。
static ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader)
          使用指定的基本名称、语言环境和类加载器获取资源包。
abstract  Enumeration<String> getKeys()
          返回键的枚举。
 Locale getLocale()
          返回此资源包的语言环境。
 Object getObject(String key)
          从此资源包或它的某个父包中获取给定值的对象。
 String getString(String key)
          从此资源包或它的某个父包中获取给定值的字符串。
 String[] getStringArray(String key)
          从此资源包或它的某个父包中获取给定值的字符串数组。
protected abstract  Object handleGetObject(String key)
          从此资源包中获取给定键的对象。
protected  void setParent(ResourceBundle parent)
          设置此包的父包。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

parent

protected ResourceBundle parent
此包的父包。当此包不包含特定资源时,由 getObject 搜索父包。

构造方法详细信息

ResourceBundle

public ResourceBundle()
单独的构造方法(由子类构造方法调用,通常是隐式的)。

方法详细信息

getString

public final String getString(String key)
从此资源包或它的某个父包中获取给定值的字符串。调用此方法等效于调用:
(String) getObject(key).

参数:
key - 所需字符串的键。
返回:
给定键的字符串。
抛出:
NullPointerException - 如果 keynull
MissingResourceException - 如果未找到给定键的对象。
ClassCastException - 如果为给定键找到的对象是不是字符串。

getStringArray

public final String[] getStringArray(String key)
从此资源包或它的某个父包中获取给定值的字符串数组。调用此方法等效于调用:
(String[]) getObject(key).

参数:
key - 所需字符串数组的键。
返回:
给定键的字符串数组。
抛出:
NullPointerException - 如果 keynull
MissingResourceException - 如果未找到给定键的对象。
ClassCastException - 如果为给定键找到的对象是不是字符串数组。

getObject

public final Object getObject(String key)
从此资源包或它的某个父包中获取给定值的对象。此方法首先尝试使用 handleGetObject 从此资源包中获取对象。如果不成功,并且父资源包不为 null,则调用父包的 getObject 方法。如果仍不成功,则抛出 MissingResourceException。

参数:
key - 所需对象的键。
返回:
给定键的对象。
抛出:
NullPointerException - 如果 keynull
MissingResourceException - 如果未找到给定键的对象。

getLocale

public Locale getLocale()
返回此资源包的语言环境。调用 getBundle() 后可使用此方法来确定返回的资源包是否真正对应于所请求的语言环境,或者只是一个回退。

返回:
此资源包的语言环境。

setParent

protected void setParent(ResourceBundle parent)
设置此包的父包。当此包不包含特定的资源时,通过 getObject 来搜索父包。

参数:
parent - 此包的父包。

getBundle

public static final ResourceBundle getBundle(String baseName)
使用指定的基本名称、默认的语言环境和调用方的类加载器获取资源包。调用此方法等效于调用:
getBundle(baseName, Locale.getDefault(), this.getClass().getClassLoader())
除了要使用 ResourceBundle 的安全特权来运行 getClassLoader()。有关搜索和实例化策略的信息,请参阅 getBundle

参数:
baseName - 资源包的基本名称,是一个完全限定类名。
返回:
具有给定基本名称和默认语言环境的资源包。
抛出:
NullPointerException - 如果 baseNamenull
MissingResourceException - 如果未找到指定基本名称的资源包。

getBundle

public static final ResourceBundle getBundle(String baseName,
                                             Locale locale)
使用指定的基本名称和语言环境,以及调用方的类加载器获取资源包。调用此方法等效于调用
getBundle(baseName, locale, this.getClass().getClassLoader())
除了要使用 ResourceBundle 的安全特权来运行 getClassLoader()。有关搜索和实例化策略的信息,请参阅 getBundle

参数:
baseName - 资源包的基本名称,是一个完全限定类名。
locale - 资源包所需的语言环境。
返回:
具有给定基本名称和语言环境的资源包。
抛出:
NullPointerException - 如果 baseNamelocalenull
MissingResourceException - 如果未找到指定基本名称的资源包。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部