Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

baseclass + " " + language1 + " " + country1 + " " + variant1

baseclass + " " + language1 + " " + country1 + " " + variant1 +

".properties"

baseclass + " " + language1 + " " + country1

baseclass + " " + language1 + " " + country1 + ".properties"

baseclass + " " + language1

baseclass + " " + language1 + ".properties"

baseclass + " " + language2 + " " + country2 + " " + variant2

baseclass + " " + language2 + " " + country2 + " " + variant2 +

".properties"

baseclass + " " + language2 + " " + country2

baseclass + " " + language2 + " " + country2 + ".properties"

baseclass + " " + language2 baseclass + " " + language2 + ".properties"

baseclass baseclass + ".properties"

Пример 14.28.

Например, если необходимо найти ResourceBundle для локали fr_CH (Швейцарский французский), а локаль по умолчанию en_US, при этом название базового класса ResourceBundle MyResources, то порядок поиска подходящего ResourceBundle будет таков.

MyResources_fr_CH

MyResources_fr

MyResources_en_US

MyResources_en

MyResources

Результатом работы getBundle будет загрузка необходимого класса ресурсов в память, однако данные этого класса могут быть сохранены на диске. Таким образом, если нужный класс не будет найден, то к требуемому имени класса будет добавлено расширение ".properties" и будет предпринята попытка найти файл с данными на диске.

Следует помнить, что необходимо указывать полностью квалифицированное имя класса ресурсов, т.е. имя пакета, имя класса. Кроме того, класс ресурсов должен быть доступен в контексте его вызова (там, где вызывается getResourceBundle ), то есть не быть private и т.д.

Всегда должен создаваться базовый класс без суффиксов, т.е. если вы создаете ресурсы с именем MyResource, должен быть в наличии класс MyResource.class.

ResourceBundle хранит объекты в виде пар ключ/значение. Как уже отмечалось ранее, класс ResourceBundle абстрактный, поэтому при его наследовании необходимо переопределить методы:

Enumeration getKeys

protected Object handleGetObject(String key)

Первый метод должен возвращать список всех ключей, которые определены в ResourceBundle, второй должен возвращать объект, связанный с конкретным ключом.

Рассмотрим пример использования ResourceBundle:

public class MyResource extends ResourceBundle {

private Hashtable res = null;

public MyResource {

res = new Hashtable;

res.put("TestKey","English Variant");

}

public Enumeration getKeys {

return res.keys;

}

protected Object handleGetObject(String key) throws

java.util.MissingResourceException {

return res.get(key);

}

}

public class MyResource_ru_RU extends ResourceBundle {

private Hashtable res = null;

public MyResource_ru_RU {

res = new Hashtable;

res.put("TestKey","Русский

вариант");

}

public Enumeration getKeys {

return res.keys;

}

protected Object handleGetObject(String key) throws

java.util.MissingResourceException {

return res.get(key);

}

}

public class Test {

public Test {

}

public static void main(String[] args) {

Test test = new Test;

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 {

Поделиться:
Популярные книги

История человечества. Россия

Харченко Павел
Научно-образовательная:
история
5.00
рейтинг книги
История человечества. Россия

Барон Бранд Берс. Том 1

Limonad
1. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 1

Ник. Цикл

Ясинский Анджей
Ник
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ник. Цикл

Домашняя медицинская энциклопедия. Симптомы и лечение самых распространенных заболеваний

Коллектив авторов
Научно-образовательная:
медицина
5.00
рейтинг книги
Домашняя медицинская энциклопедия. Симптомы и лечение самых распространенных заболеваний

Медная шкатулка (сборник)

Рубина Дина Ильинична
Проза:
современная проза
7.50
рейтинг книги
Медная шкатулка (сборник)

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Мессия. Том 1

Раджниш Бхагаван Шри
Религия и эзотерика:
самосовершенствование
эзотерика
5.00
рейтинг книги
Мессия. Том 1

Избранное

Хоакин Ник
Мастера современной прозы
Проза:
современная проза
5.00
рейтинг книги
Избранное

Огненный шторм

Янковский Дмитрий Валентинович
Фантастика:
научная фантастика
7.00
рейтинг книги
Огненный шторм

Герои 1812 года

Дуров Валерий Александрович
680. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Герои 1812 года

В тебе моя жизнь...

Струк Марина
Любовные романы:
исторические любовные романы
9.21
рейтинг книги
В тебе моя жизнь...

Том 14. Критические статьи, очерки, письма

Гюго Виктор
14. Собрание сочинений
Документальная литература:
критика
публицистика
5.00
рейтинг книги
Том 14. Критические статьи, очерки, письма

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Том 3. Рассказы 1903-1915. Публицистика

Короленко Владимир Галактионович
3. Собрание сочинений в пяти томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 3. Рассказы 1903-1915. Публицистика