关于 ResourceBundle 类

ResourceBundle 与语言环境的关系

从概念上讲,每个ResourceBundle是一组共享相同基本名称的相关子类。下面的列表显示了一组相关的子类。 ButtonLabel是基本名称。基本名称后面的字符表示语言代码,国家/地区代码和Locale的变体。 ButtonLabel_en_GB例如,与英语的语言代码(en)和英国的国家代码(GB)指定的Locale匹配。

ButtonLabel
ButtonLabel_de
ButtonLabel_en_GB
ButtonLabel_fr_CA_UNIX

若要选择适当的ResourceBundle,请调用ResourceBundle.getBundle方法。以下示例为Locale选择与法语,加拿大所在国家和 UNIX 平台匹配的ButtonLabel ResourceBundle

Locale currentLocale = new Locale("fr", "CA", "UNIX");
ResourceBundle introLabels = ResourceBundle.getBundle(
                                 "ButtonLabel", currentLocale);

如果指定的LocaleResourceBundle类不存在,则getBundletry查找最接近的匹配项。例如,如果ButtonLabel_fr_CA_UNIX是所需的类,而默认的Localeen_US,则getBundle将按以下 Sequences 查找类:

ButtonLabel_fr_CA_UNIX
ButtonLabel_fr_CA
ButtonLabel_fr
ButtonLabel_en_US
ButtonLabel_en
ButtonLabel

请注意,getBundle在选择 Base Class(ButtonLabel)之前,会根据默认的Locale查找类。如果getBundle在前面的类列表中找不到匹配项,则会抛出MissingResourceException。为避免引发此异常,应始终提供一个没有后缀的 Base Class。

ListResourceBundle 和 PropertyResourceBundle 子类

抽象类ResourceBundle具有两个子类:PropertyResourceBundleListResourceBundle

PropertyResourceBundle由属性文件支持。属性文件是包含可翻译文本的纯文本文件。属性文件不是 Java 源代码的一部分,并且它们只能包含String对象的值。如果需要存储其他类型的对象,请改用ListResourceBundle使用属性文件备份 ResourceBundle部分显示了如何使用PropertyResourceBundle

ListResourceBundle类通过便捷的列表 管理 资源。每个ListResourceBundle都有一个类文件支持。您可以将任何特定于语言环境的对象存储在ListResourceBundle中。要添加对其他Locale的支持,您可以创建另一个源文件并将其编译为类文件。 使用 ListResourceBinding 包部分提供了一个编码示例,您可能会有所帮助。

ResourceBundle类很灵活。如果先将特定于语言环境的String对象放入PropertyResourceBundle,然后又决定使用ListResourceBundle,则对您的代码没有影响。例如,以下对getBundle的调用将为相应的Locale检索ResourceBundle,而不管ButtonLabel是由类还是由属性文件备份的:

ResourceBundle introLabels = ResourceBundle.getBundle(
                                 "ButtonLabel", currentLocale);

Key-Value Pairs

ResourceBundle个对象包含一组键值对。要从ResourceBundle检索值时,请指定键,该键必须为String。该值是特定于语言环境的对象。以下示例中的键是OkKeyCancelKey字符串:

class ButtonLabel_en extends ListResourceBundle {
    // English version
    public Object[][] getContents() {
        return contents;
    }
    static final Object[][] contents = {
        {"OkKey", "OK"},
        {"CancelKey", "Cancel"},
    };
}

要从ResourceBundle中检索OK String,您需要在调用getString时指定适当的密钥:

String okLabel = ButtonLabel.getString("OkKey");

属性文件包含键值对。键位于等号的左侧,值位于右侧。每对在单独的行上。这些值只能代表String个对象。以下示例显示了名为ButtonLabel.properties的属性文件的内容:

OkKey = OK
CancelKey = Cancel