пакет ресурсов Java - PullRequest
4 голосов
/ 31 мая 2011

Можно ли сохранить пакет ресурсов в структуре папок, что-то похожее на следующее;

 1. us\en
 2. ae\en
 3. ae\ar

Имя файла пакета ресурсов будет одинаковым, но будет храниться в разных папках. Я знаю, что Java рекомендует

myresource_en_US.properties

Но мне нужно хранить их в папках и использовать классы комплектов ресурсов для доступа. Я использую JDK 6. Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

6 голосов
/ 31 мая 2011

Да, вы можете контролировать загрузку с помощью пользовательского Control. Вот пример начала:

public class FolderControl extends Control {
    public ResourceBundle newBundle
        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
            throws IllegalAccessException, InstantiationException, IOException
    {
        String resourceName = "/" + locale.getCountry() + "/" + locale.getLanguage() 
            + "/" baseName + ".properties";
        ResourceBundle bundle = null;
        InputStream stream = null;
        if (reload) {
            URL url = loader.getResource(resourceName);
            if (url != null) {
                URLConnection connection = url.openConnection();
                if (connection != null) {
                    connection.setUseCaches(false);
                    stream = connection.getInputStream();
                }
            }
        } else {
            stream = loader.getResourceAsStream(resourceName);
        }
        if (stream != null) {
            try {
                bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
            } finally {
                stream.close();
            }
        }
        return bundle;
    }
}

(исходный код скопирован из реализации по умолчанию с изменением только resourceName и изменением PropertyResourceBundle для чтения потока как UTF-8 - больше не требуется для native2ascii)

который вы используете следующим образом

ResourceBundle bundle = ResourceBundle.getBundle("myresource", new FolderControl());
// ...

Смотри также:

0 голосов
/ 31 мая 2011

Взгляните на http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.Control.html.. Вы можете передать один из них в качестве аргумента ResourceBundle.getBundle() как способ "обеспечить различные соглашения в организации и упаковке локализованных ресурсов".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...