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

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

Жанры

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

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

Наномашины, звереныш! Том 5

Новиков Николай Васильевич
5. Первый среди карапузов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наномашины, звереныш! Том 5

Локки 7. Потомок бога

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

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

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

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2

Мечник Вернувшийся 1000 лет спустя. Том 2

Ткачев Андрей Юрьевич
2. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Мечник Вернувшийся 1000 лет спустя. Том 2

Глэрд IX: Легионы во Тьме

Владимиров Денис
9. Глэрд
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Глэрд IX: Легионы во Тьме

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Солнечный флот

Вайс Александр
4. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Солнечный флот

Зодчий. Книга II

Погуляй Юрий Александрович
2. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга II

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Базис

Владимиров Денис
7. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Базис

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Матабар V

Клеванский Кирилл Сергеевич
5. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар V

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5