关于 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);
如果指定的Locale
的ResourceBundle
类不存在,则getBundle
try查找最接近的匹配项。例如,如果ButtonLabel_fr_CA_UNIX
是所需的类,而默认的Locale
是en_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
具有两个子类:PropertyResourceBundle
和ListResourceBundle
。
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
。该值是特定于语言环境的对象。以下示例中的键是OkKey
和CancelKey
字符串:
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