使用 ListResourceBundle

原文: https://docs.oracle.com/javase/tutorial/i18n/resbundle/list.html

本节说明了ListResourceBundle对象与 ListDemo的示例程序的使用。下面的文本解释了创建ListDemo程序所涉及的每个步骤,以及支持它的ListResourceBundle子类。

1.创建 ListResourceBundle 子类

ListResourceBundle由类文件备份。因此,第一步是为每个支持的Locale创建一个类文件。在ListDemo程序中,ListResourceBundle的基本名称是StatsBundle。由于ListDemo支持三个Locale对象,因此需要以下三个类文件:

  1. StatsBundle_en_CA.class
  2. StatsBundle_fr_FR.class
  3. StatsBundle_ja_JP.class

日本的StatsBundle类在后面的源代码中定义。请注意,通过将语言和国家/地区代码附加到ListResourceBundle的基本名称来构造类名。在类中,使用键值对初始化二维contents数组。键是每对中的第一个元素:GDPPopulationLiteracy。键必须是String对象,并且它们在StatsBundle集中的每个类中必须相同。值可以是任何类型的对象。在此示例中,值为两个Integer对象和一个Double对象。

  1. import java.util.*;
  2. public class StatsBundle_ja_JP extends ListResourceBundle {
  3. public Object[][] getContents() {
  4. return contents;
  5. }
  6. private Object[][] contents = {
  7. { "GDP", new Integer(21300) },
  8. { "Population", new Integer(125449703) },
  9. { "Literacy", new Double(0.99) },
  10. };
  11. }

2.指定区域设置

ListDemo程序定义Locale对象如下:

  1. Locale[] supportedLocales = {
  2. new Locale("en", "CA"),
  3. new Locale("ja", "JP"),
  4. new Locale("fr", "FR")
  5. };

每个Locale对象对应一个StatsBundle类。例如,使用jaJP代码定义的日语LocaleStatsBundle_ja_JP.class匹配。

3.创建 ResourceBundle

要创建ListResourceBundle,请调用getBundle方法。以下代码行指定类的基本名称(StatsBundle)和Locale

  1. ResourceBundle stats = ResourceBundle.getBundle("StatsBundle", currentLocale);

getBundle方法搜索名称以StatsBundle开头的类,后面跟着指定的Locale的语言和国家代码。如果使用jaJP代码创建currentLocalegetBundle将返回与StatsBundle_ja_JP类对应的ListResourceBundle

4.获取本地化对象

既然程序有适当LocaleListResourceBundle,它可以通过键获取本地化对象。以下代码行通过使用Literacy键参数调用getObject来检索识字率。由于getObject返回一个对象,将其强制转换为Double

  1. Double lit = (Double)stats.getObject("Literacy");

5.运行演示程序

ListDemo程序打印使用getBundle方法获取的数据:

  1. Locale = en_CA
  2. GDP = 24400
  3. Population = 28802671
  4. Literacy = 0.97
  5. Locale = ja_JP
  6. GDP = 21300
  7. Population = 125449703
  8. Literacy = 0.99
  9. Locale = fr_FR
  10. GDP = 20200
  11. Population = 58317450
  12. Literacy = 0.99