Читаем Программирование на Java полностью

ResourceBundle rb = ResourceBundle.getBundle("experiment.MyResource",Locale.getDefault());

System.out.println(rb.getString("TestKey"));

rb = ResourceBundle.getBundle("experiment.MyResource", new Locale("ru","RU"));

System.out.println(rb.getString("TestKey"));

}

}

Пример 14.29.

Результатом будет:


English Variant Русский Вариант

Кроме того, следует обратить внимание, что ResourceBundle может хранить не только строковые значения. В нем можно хранить также двоичные данные, или просто методы, реализующие нужную функциональность, в зависимости от локали.

public interface Behavior {

public String getBehavior();

public String getCapital();

}

public class EnglishBehavior implements Behavior {

public EnglishBehavior() {


}

public String getBehavior() {

return "English behavior";

}

public String getCapital() {

return "London";

}

}

public class RussianBehavior implements Behavior {

public RussianBehavior() {


}

public String getBehavior() {

return "Русский вариант поведения";

}

public String getCapital() {

return "Москва";

}

}

public class MyResourceBundle_ru_RU extends ResourceBundle {

Hashtable bundle = null;

public MyResourceBundle_ru_RU() {

bundle = new Hashtable();

bundle.put("Bundle description","Набор ресурсов для русской локали");

bundle.put("Behavior",new RussianBehavior());

}

public Enumeration getKeys() {

return bundle.keys();

}

protected Object handleGetObject(String key) throws

java.util.MissingResourceException {

return bundle.get(key);

}

}

public class MyResourceBundle_en_EN extends ResourceBundle {

Hashtable bundle = null;

public MyResourceBundle_en_EN() {

bundle = new Hashtable();

bundle.put("Bundle description","English resource set");

bundle.put("Behavior",new EnglishBehavior());

}

public Enumeration getKeys() {

return bundle.keys();

}

protected Object handleGetObject(String key) throws

java.util.MissingResourceException {

return bundle.get(key);

}

}

public class MyResourceBundle extends ResourceBundle {

Hashtable bundle = null;

public MyResourceBundle() {

bundle = new Hashtable();

bundle.put("Bundle description","Default resource bundle");

bundle.put("Behavior",new EnglishBehavior());

}

public Enumeration getKeys() {

return bundle.keys();

}

protected Object handleGetObject(String key) throws

java.util.MissingResourceException {

return bundle.get(key);

}

}

public class Using {

public Using() {


}

public static void main(String[] args) {

Using u = new Using();

ResourceBundle rb = ResourceBundle.getBundle("lecture.MyResourceBundle", Locale.getDefault());

System.out.println((String)rb.getObject("Bundle description"));

Behavior be = (Behavior)rb.getObject("Behavior");

System.out.println(be.getBehavior());

System.out.println(be.getCapital());

rb = ResourceBundle.getBundle("lecture.MyResourceBundle", new Locale("en","EN"));

System.out.println((String)rb.getObject("Bundle description"));

Behavior be = (Behavior)rb.getObject("Behavior");

System.out.println(be.getBehavior());

System.out.println(be.getCapital());

}

Пример 14.30.

Результатом будет:


Русский набор ресурсов

Русский вариант поведения

Москва

English resource bundle

English behavior

London

Пример 14.31.

Классы ListResourceBundle и PropertiesResourceBundle

У класса ResourceBundle определено два прямых потомка ListResourceBundle и PropertiesResourceBundle. PropertiesResourceBundle хранит набор ресурсов в файле, который представляет собой набор строк.

Алгоритм конструирования объекта, содержащего набор ресурсов, был описан в предыдущем параграфе. Во всех случаях, когда в качестве последнего элемента используется .properties, например, baseclass + " " + language1 + " " + country1 + ".properties", речь идет о создании ResourceBundle из файла с наименованием baseclass + " " + language1 + " " + country1 и расширением properties. Обычно класс ResourceBundle помещают в пакет resources, а файл свойств - в каталог resources. Тогда для того, чтобы инстанциировать нужный класс, необходимо указать полный путь к этому классу (файлу):


getBundle("resources.MyResource",

Locale.getDefault());

ListResourceBundle хранит набор ресурсов в виде коллекции и является абстрактным классом. Классы, которые наследуют ListResourceBundle, должны обеспечить:


переопределение метода Object[][] getContents(), который возвращает массив ресурсов;

собственно двумерный массив, содержащий ресурсы.

Рассмотрим пример:


public class MyResource extends ListResourceBundle {

Vector v = new Vector();

Object[][] resources = {


{

"StringKey","String"

}

, {

"DoubleKey",new Double(0.0)

}

, {

"VectorKey",v

}

,

};

public MyResource() {

super();

v.add("Element 1");

v.add("Element 2");

v.add("Element 3");

}

protected Object[][] getContents() {

return resources;

}

}

public class Test {

public Test() {


}

public static void main(String[] args) {

Test test = new Test();

ResourceBundle rb = ResourceBundle.getBundle("experiment.MyResource",Locale.getDefault());

Vector v = (Vector)rb.getObject("VectorKey");

Iterator it = v.iterator();

while(it.hasNext()) {

System.out.println(it.next());

}

}

}

Пример 14.32.

Результатом будет:


Element 1

Element 2

Element 3

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT