Re[4]: Ресурсы локализации
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.01.05 17:01
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Да, конечно. Что делает этот класс: читает XML, загоняет в Properties, потом сохраняет Properties в обычный формат, и подсовывает этот формат созданному ResourceBundle.


Вобщем сделал, но как то это через задницу — парсить текстовик, потом опять в текстовик преобразовывать.
Если кому интересно вот правленый код под 5.0:
package com.parus.dss.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Properties;

public class XmlResourceBundleClassLoader extends ClassLoader {
    protected static XmlResourceBundleClassLoader RESOURCEBUNDLECLASSLOADER = new XmlResourceBundleClassLoader();

    private static final String PROPERTIES_SUFFIX = ".properties";
    private static final int PROPERTIES_SUFFIX_LENGTH = PROPERTIES_SUFFIX.length();

    private static final String XML_SUFFIX = ".xml";

    protected XmlResourceBundleClassLoader() {
    }

    public static XmlResourceBundleClassLoader getInstance() {
        return RESOURCEBUNDLECLASSLOADER;
    }

    public InputStream getResourceAsStream(String resource) {
        InputStream is = null;
        try {
            is = super.getResourceAsStream(resource);
        } catch (Exception e) {
        }

        if (is != null) {
            return is;
        }

        try {
            is = getXmlStream(resource);
            return is;
        } catch (Exception e) {
        }

        return null;
    }


    private InputStream getXmlStream(String resource) {
        try {
            Properties properties = new Properties();
            InputStream is = this.getClass().getClassLoader().getResourceAsStream(fixResourceName(resource));
            properties.loadFromXML(is);
            is.close();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            properties.store(baos, null);
            byte[] data = baos.toByteArray();
            ByteArrayInputStream bais = new ByteArrayInputStream(data);

            return bais;
        } catch (Exception e) {
            Exception e2 = e;
        }

        return null;
    }


    private String fixResourceName(String resource) {
        if (!resource.endsWith(PROPERTIES_SUFFIX)) {
            return (resource + XML_SUFFIX);
        } else {
            int lengthWithoutSuffix = resource.length() - PROPERTIES_SUFFIX_LENGTH;
            return (resource.substring(0, lengthWithoutSuffix) + XML_SUFFIX);
        }
    }

    /*public static void main(String[] args) {
        ResourceBundle rb = ResourceBundle.getBundle("LanguageResource",
            new Locale("ru", "ru"), XmlResourceBundleClassLoader.getInstance());
        String hhh = rb.getString("key1");
    } // main*/
}
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.