使用 ListResourceBundle
原文: https://docs.oracle.com/javase/tutorial/i18n/resbundle/list.html
本节说明了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
数组。键是每对中的第一个元素: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