这些Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言变化以获取Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明以获取有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
从概念上讲,每个ResourceBundle
是一组相关的子类,它们共享相同的基本名称。下面的列表显示了一组相关的子类。 ButtonLabel
是基本名称。基本名称后面的字符表示Locale
的语言代码、国家代码和变体。例如,ButtonLabel_en_GB
与指定的Locale
匹配,该Locale
的语言代码为英语(en
),国家代码为英国(GB
)。
ButtonLabel ButtonLabel_de ButtonLabel_en_GB ButtonLabel_fr_CA_UNIX
要选择适当的ResourceBundle
,请调用ResourceBundle.getBundle
方法。以下示例选择与法语、加拿大国家和UNIX平台匹配的ButtonLabel
ResourceBundle
。
Locale currentLocale = new Locale("fr", "CA", "UNIX"); ResourceBundle introLabels = ResourceBundle.getBundle( "ButtonLabel", currentLocale);
如果指定的Locale
没有对应的ResourceBundle
类,getBundle
方法会尝试找到最接近的匹配。例如,如果所需的类是ButtonLabel_fr_CA_UNIX
,默认的Locale
是en_US
,getBundle
方法将按照以下顺序查找类:
ButtonLabel_fr_CA_UNIX ButtonLabel_fr_CA ButtonLabel_fr ButtonLabel_en_US ButtonLabel_en ButtonLabel
注意,在选择基本类(ButtonLabel
)之前,getBundle
方法会根据默认的Locale
查找类。如果在前面的类列表中找不到匹配项,getBundle
方法会抛出MissingResourceException
异常。为了避免抛出此异常,您应该始终提供一个没有后缀的基本类。
抽象类ResourceBundle
有两个子类:PropertyResourceBundle
和ListResourceBundle
。
PropertyResourceBundle
是由属性文件支持的。属性文件是一个包含可翻译文本的纯文本文件。属性文件不属于Java源代码的一部分,它们只能包含String
对象的值。如果需要存储其他类型的对象,请使用ListResourceBundle
。在使用属性文件支持ResourceBundle一节中,您将了解如何使用PropertyResourceBundle
。
ListResourceBundle
类使用方便的列表管理资源。每个ListResourceBundle
都由一个类文件支持。您可以在ListResourceBundle
中存储任何特定于语言环境的对象。要为其他Locale
添加支持,您需要创建另一个源文件并将其编译为类文件。在使用ListResourceBundle一节中,有一个可能对您有帮助的编码示例。
ResourceBundle
类是灵活的。如果你首先将特定于语言环境的String
对象放入PropertyResourceBundle
中,然后决定改用ListResourceBundle
,对你的代码没有任何影响。例如,下面对getBundle
的调用将检索到适当语言环境的ResourceBundle
,无论ButtonLabel
是由类支持还是由属性文件支持:
ResourceBundle introLabels = ResourceBundle.getBundle( "ButtonLabel", currentLocale);
ResourceBundle
对象包含一个键值对数组。当你想要从ResourceBundle
中检索值时,你需要指定键,键必须是一个String
。值是特定于语言环境的对象。下面的示例中,OkKey
和CancelKey
是键的字符串:
class ButtonLabel_en extends ListResourceBundle { // 英文版本 public Object[][] getContents() { return contents; } static final Object[][] contents = { {"OkKey", "OK"}, {"CancelKey", "Cancel"}, }; }
要从ResourceBundle
中检索OK
字符串,你需要在调用getString
时指定适当的键:
String okLabel = ButtonLabel.getString("OkKey");
属性文件包含键值对。键在等号的左侧,值在右侧。每对键值对占据一行。值只能表示String
对象。下面的示例显示了名为ButtonLabel.properties
的属性文件的内容:
OkKey = OK CancelKey = Cancel