The JavaTM Tutorial
Previous Page Lesson Contents Next Page

Урок: Выделение данных, зависящих от локализации

Использование ListResourceBundle

Этот раздел иллюстрирует использование объекта 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. Задание Local

Программа ListDemo определяет объект Locale так:
Locale[] supportedLocales = {
    new Locale("en", "CA"),
    new Locale("ja", "JP"),
    new Locale("fr", "FR")
};
Каждый объект Locale связан с одним из классов StatsBundle. Например, японской Locale, которая определена с кодами ja и JP, соответствует StatsBundle_ja_JP.class.

3. Создание ResourceBundle

Lkz cjplfybz ListResourceBundle вызывается метод getBundle. Следующая строка кода задает базовое имя для класса (StatsBundle) и Locale:
ResourceBundle stats =
		ResourceBundle.getBundle("StatsBundle", currentLocale);

Метод getBundle ищет класс, имя которого начинается с StatsBundle, за которым следуют коды языка и страны заданной Locale. currentLocale создана с кодами ja и JP, getBundle возвращает ListResourceBundle, соответствующий классу StatsBundle_ja_JP, например.

4. Выборка локализованных объектов

Теперь, когда программа имеет ListResourceBundle для требуемой Locale, она может выбирать локализованные объекты по их ключам. Следующая строка кода получает уровень грамотности вызывая getObject с параметром Literacy. Поскольку 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

Previous Page Lesson Contents Next Page

Copyright 1995-2002 Sun Microsystems, Inc. All rights reserved.