使用 ListResourceBundle

本节说明了ListResourceBundle对象与名为ListDemo的示例程序的使用。后面的 Literals 说明了创建ListDemo程序所涉及的每个步骤,以及支持该程序的ListResourceBundle子类。

1.创建 ListResourceBundle 子类

ListResourceBundle由类文件备份。因此,第一步是为每个受支持的Locale创建一个类文件。在ListDemo程序中,ListResourceBundle的基本名称是StatsBundle。由于ListDemo支持三个Locale对象,因此它需要以下三个类文件:

StatsBundle_en_CA.class
StatsBundle_fr_FR.class
StatsBundle_ja_JP.class

日本的StatsBundle类在下面的源代码中定义。请注意,通过将语言和国家/地区代码附加到ListResourceBundle的基本名称来构造类名称。在类内部,使用键-值对初始化二维contents数组。键是每对中的第一个元素:GDPPopulationLiteracy。键必须是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) },
    };
}

2.指定语言环境

ListDemo程序如下定义Locale对象:

Locale[] supportedLocales = {
    new Locale("en", "CA"),
    new Locale("ja", "JP"),
    new Locale("fr", "FR")
};

每个Locale对象对应于StatsBundle类之一。例如,用jaJP代码定义的日语LocaleStatsBundle_ja_JP.class匹配。

3.创建 ResourceBundle

要创建ListResourceBundle,请调用getBundle方法。以下代码行指定了类的基本名称(StatsBundle)和Locale

ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);

getBundle方法搜索名称以StatsBundle开头,后跟指定Locale的语言和国家/地区代码的类。例如,如果使用jaJP代码创建currentLocale,则getBundle返回对应于类StatsBundle_ja_JPListResourceBundle

4.提取本地化的对象

现在,该程序为相应的Locale提供了一个ListResourceBundle,它可以通过它们的键来获取本地化的对象。以下代码行通过使用Literacy键参数调用getObject来检索识字率。由于getObject返回一个对象,请将其强制转换为Double

Double lit = (Double)stats.getObject("Literacy");

5.运行演示程序

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