# 使用 ListResourceBundle

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/resbundle/list.html](https://docs.oracle.com/javase/tutorial/i18n/resbundle/list.html)

本节说明了`ListResourceBundle`对象与 [``ListDemo``](examples/ListDemo.java)的示例程序的使用。下面的文本解释了创建`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`数组。键是每对中的第一个元素：`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) },
    };
}

```

## 2.指定区域设置

`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`匹配。

## 3.创建 ResourceBundle

要创建`ListResourceBundle`，请调用`getBundle`方法。以下代码行指定类的基本名称（`StatsBundle`）和`Locale`：

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

```

`getBundle`方法搜索名称以`StatsBundle`开头的类，后面跟着指定的`Locale`的语言和国家代码。如果使用`ja`和`JP`代码创建`currentLocale`，`getBundle`将返回与`StatsBundle_ja_JP`类对应的`ListResourceBundle`。

## 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

```