文档

Java™ 教程-Java Tutorials 中文版
使用 ListResourceBundle
Trail: Internationalization
Lesson: Isolating Locale-Specific Data

使用 ListResourceBundle

本节说明了 ListResourceBundle 对象与名为 ListDemo 的示例程序的使用。下面的文本解释了创建 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 代码定义的日语 Locale 匹配 StatsBundle_ja_JP.class

3. 创建 ResourceBundle

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

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

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

4. 获取本地化对象

既然程序有适当的 LocaleListResourceBundle,它可以通过键获取本地化对象。以下代码行通过使用 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

Previous page: Backing a ResourceBundle with Properties Files
Next page: Customizing Resource Bundle Loading