使用 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
数组。键是每对中的第一个元素: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