文档

Java™教程
隐藏目录
使用ListResourceBundle
路径:国际化
课程:隔离区域特定数据

使用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. 指定Locale

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 的语言和国家代码的类。如果 currentLocale 是使用 jaJP 代码创建的,getBundle 方法会返回与类 StatsBundle_ja_JP 对应的 ListResourceBundle,例如。

4. 获取本地化对象

现在程序有了适合的 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

上一页: 使用Properties文件备份ResourceBundle
下一页: 自定义Resource Bundle加载方式