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 + '
getBundle('resources.MyResource', Locale.getDefault());
ListResourceBundle хранит набор ресурсов в виде коллекции и является абстрактным классом. Классы, которые наследуют ListResourceBundle, должны обеспечить:
переопределение метода Object[][] getContents(), который возвращает массив ресурсов;