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

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

Жанры

Программирование на 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 {

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

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Анти-Ксенонская Инициатива

Вайс Александр
7. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Анти-Ксенонская Инициатива

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Лекарь Империи 3

Карелин Сергей Витальевич
3. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи 3

Зеркало силы

Кас Маркус
3. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Зеркало силы

Законы Рода. Том 6

Андрей Мельник
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Петля, Кадетский корпус. Книга девятая

Алексеев Евгений Артемович
9. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский корпус. Книга девятая

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Любовь Носорога

Зайцева Мария
Любовные романы:
современные любовные романы
9.11
рейтинг книги
Любовь Носорога

Черный Маг Императора 19

Герда Александр
19. Черный маг императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 19

Иной. Том 1. Школа на краю пустыни

Amazerak
1. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.75
рейтинг книги
Иной. Том 1. Школа на краю пустыни

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19