使用 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.classStatsBundle_fr_FR.classStatsBundle_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_CAGDP = 24400Population = 28802671Literacy = 0.97Locale = ja_JPGDP = 21300Population = 125449703Literacy = 0.99Locale = fr_FRGDP = 20200Population = 58317450Literacy = 0.99
