Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
本节说明了 ListResourceBundle
对象与名为
的示例程序的使用。下面的文本解释了创建 ListDemo
ListDemo
程序所涉及的每个步骤,以及支持它的 ListResourceBundle
子类。
ListResourceBundle
由类文件支持。因此,第一步是为每个支持的 Locale
创建一个类文件。在 ListDemo
程序中,ListResourceBundle
的基本名称是 StatsBundle
。由于 ListDemo
支持三个 Locale
对象,因此需要以下三个类文件:
StatsBundle_en_CA.class StatsBundle_fr_FR.class StatsBundle_ja_JP.class
日本的 StatsBundle
类在后面的源代码中定义。请注意,通过将语言和国家/地区代码附加到 ListResourceBundle
的基本名称来构造类名。在类中,使用键值对初始化二维 contents
数组。键是每对中的第一个元素:GDP
,Population
和 Literacy
。键必须是 String
对象,并且它们必须在 StatsBundle
集中的每个类中相同。值可以是任何类型的对象。在此示例中,值为两个 Integer
对象和一个 Double
对象。
import java.util.*; public class StatsBundle_ja_JP extends ListResourceBundle { public Object[][] getContents() { return contents; } private Object[][] contents = { { "GDP", new Integer(21300) }, { "Population", new Integer(125449703) }, { "Literacy", new Double(0.99) }, }; }
ListDemo
程序定义 Locale
对象,如下所示:
Locale[] supportedLocales = { new Locale("en", "CA"), new Locale("ja", "JP"), new Locale("fr", "FR") };
每个 Locale
对象对应于 StatsBundle
类之一。例如,使用 ja
和 JP
代码定义的日语 Locale
匹配 StatsBundle_ja_JP.class
。
要创建 ListResourceBundle
,请调用 getBundle
方法。以下代码行指定类的基本名称(StatsBundle
)和 Locale
:
ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);
getBundle
方法搜索名称以 StatsBundle
开头的类,后跟指定的 Locale
的语言和国家/地区代码。如果使用 ja
和 JP
代码创建 currentLocale
,getBundle
将返回 ListResourceBundle
例如,对应于类 StatsBundle_ja_JP
。
既然程序有适当的 Locale
的 ListResourceBundle
,它可以通过键获取本地化对象。以下代码行通过使用 Literacy
键参数调用 getObject
来获取识字率。由于 getObject
返回一个对象,将其强制转换为 Double
:
Double lit = (Double)stats.getObject("Literacy");
ListDemo
程序打印使用 getBundle
方法获取的数据:
Locale = en_CA GDP = 24400 Population = 28802671 Literacy = 0.97 Locale = ja_JP GDP = 21300 Population = 125449703 Literacy = 0.99 Locale = fr_FR GDP = 20200 Population = 58317450 Literacy = 0.99