# 使用 ListResourceBundle
本节通过一个 ListDemo
来讲解如何使用
# 创建 ListResourceBundle 的子类
这里创建支持三种 Locale 的 ListResourceBundle 子类
StatsBundle_en_CA.class
StatsBundle_fr_FR.class
StatsBundle_ja_JP.class
1
2
3
2
3
这是其中一个类的实现
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) },
};
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
这里 key 对应的不再只有字符串了,而是两个 Integer 和一个 double 类型的消息。
# 指定 Locale
Locale[] supportedLocales = {
new Locale("en", "CA"),
new Locale("ja", "JP"),
new Locale("fr", "FR")
};
1
2
3
4
5
2
3
4
5
定义支持的三个语言环境 Locale,每一个 Locale 对应一个 ListResourceBundle 子类
# 创建 ListResourceBundle
ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);
1
getBundle 方法搜索名称以 StatsBundle 开头的类,后跟指定区域设置的语言和国家/地区代码。例如,如果使用 ja 和 JP 代码创建当前 Locale,getBundle 将返回 ListResourceBundle 子类 StatsBundle_ja_JP
# 获取消息
Double lit = (Double)stats.getObject("Literacy");
1
通过 getObject 获取,然后强转成原本的类型。
# 运行程序
本章列出来一个 StatsBundle_ja_JP 的实现类,另外另个你自行实现下,然后放在 classpath 下就可以
import java.util.Locale;
import java.util.ResourceBundle;
public class ListDemo {
static public void main(String[] args) {
Locale[] supportedLocales = {
new Locale("en", "CA"),
new Locale("ja", "JP"),
new Locale("fr", "FR")
};
for (int i = 0; i < supportedLocales.length; i++) {
System.out.println("Locale = " + supportedLocales[i]);
displayValues(supportedLocales[i]);
System.out.println();
}
} // main
static void displayValues(Locale currentLocale) {
// 特别需要注意的是这里的 baseName
// 源码里面支持 class 和 properties 两种方式
// 先查找的就是 class,所以如果你的 ListResourceBundle 子类有包名的话,需要给到完整的包名
ResourceBundle stats = ResourceBundle.getBundle("com.java.StatsBundle", currentLocale);
Integer gdp = (Integer) stats.getObject("GDP");
System.out.println("GDP = " + gdp.toString());
Integer pop = (Integer) stats.getObject("Population");
System.out.println("Population = " + pop.toString());
Double lit = (Double) stats.getObject("Literacy");
System.out.println("Literacy = " + lit.toString());
} // displayValues
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
运行输出如下
Locale = en_CA
GDP = 113000
Population = 126489
Literacy = 0.5
Locale = ja_JP
GDP = 21300
Population = 125449703
Literacy = 0.99
Locale = fr_FR
GDP = 113000
Population = 126489
Literacy = 0.5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14