Подтвердить что ты не робот

Получить доступные языки для приложения

Я хочу получить только доступные языки для моего приложения для Android, то есть те, для которых у меня есть папка с именем values ​​- (например, values-en, values-fr) в папке res.

Я не хочу хранить языковые коды, и я думаю, чтобы перечислить все подпапки "res" значений формы - * и взять код языка из своего имени. (в конце концов проверьте, находится ли код в массиве, возвращаемом Locale.getAvailableLocales(), чтобы убедиться, что он правильный). Эта идея заявлена ​​здесь Как получить доступные языки (не все из них, только языки, доступные в моем приложении).

Я пробовал использовать

getResources().getAssets().list("res"); getResources().getAssets().list("/res"); 
getResources().getAssets().list("/res/");

но никто из них не работал.

Есть ли у вас какие-либо идеи о том, как я могу перечислить подпапки папки "res"?

Спасибо заранее.

4b9b3361

Ответ 1

Я не знаю прямого способа сделать это, но я сделал аналогичную вещь с папкой с ресурсами, которая должна работать нормально. Я использую IntelliJ IDEA и ANT для Windows для своего здания, но вы должны иметь возможность адаптировать это для Eclipse или других IDE и * nix/OSX.

Перед компиляцией я использую фасет ANT для запуска команды dir, чтобы перечислить все файлы в папке с ресурсами и передать вывод в текстовый файл:

dir /assets /s /b > /res/raw/filelist.txt

Затем я читаю filelist.txt в hashmap, чтобы дать мне очень простой и быстрый способ найти любой файл (у меня есть сотни файлов в десятках активов вложенных папок, а AssetManager слишком мозг мертв, чтобы справиться с этим).

public class AssetsFileManager {

   private static Map<String, String> files = new HashMap<String, String>();

   static{

        BufferedReader in = new BufferedReader(new InputStreamReader(this.getResources.openRawResource(R.raw.filelist)))
        String line = "";
        while ((line = in.readLine()) != null) {               
           map.put(line.substring(line.lastIndexOf("\\")+1), line);
        }
        in.close();
   }
}

Обратите внимание на скрытую обратную косую черту, \\

Это дает мне карту с именем файла и полным путем в качестве значения.

Вы можете легко адаптировать этот подход, чтобы получить список ваших папок. Например. вы можете использовать dir /ad /b /s

Ответ 2

Я не уверен, что это сработает, но вы можете получить все возможные языки с помощью Locale.getAvaliableLocales() и попытаться получить некоторый ресурс (например, app_name) для каждого языкового стандарта в списке. Здесь - один из возможных способов.