2012-11-23 12 views
13

Sadece android uygulamamın kullanabileceği dilleri edinmek istiyorum, örn., Klasörde değerler-(ör. Değerler-en, değerler-fr) adlı bir klasör var.Bir uygulama için kullanılabilir diller edinin

Dil kodlarını saklamak istemiyorum ve form değerlerinin * res "alt" ının tüm alt klasörlerini listelemeyi ve dil kodunu kendi adlarından almayı düşünüyorum. (kodun, doğru olduğundan emin olmak için Locale.getAvailableLocales() tarafından döndürülen dizide olup olmadığını kontrol edin). Bu fikir burada How to get the available languages (Not all of them, just the languages available on my app) belirtilmiştir.

Ben

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

kullanarak denedim ama hiçbiri çalıştı.

"Res" klasörünün alt klasörlerini nasıl listeleyebileceğimi biliyor musunuz?

Önceden teşekkür ederiz.

cevap

2

Bunu yapmak için doğrudan bir yol bilmiyorum, ancak iyi çalışması gereken öğeler klasörüyle benzer bir şey yaptım. Binam için IntelliJ IDEA ve ANT'yi Windows'da kullanıyorum, ancak bunu Eclipse veya diğer IDE ve * nix/OSX için uyarlayabilmeniz gerekir. Bir içine filelist.txt

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

Sonra okuyun:

derleme önce, varlıkları klasöründe ve borudaki bir metin dosyasına çıktı tüm dosyaları listelemek için bir dir komutunu çalıştırmak için bir ANT inşa faset kullanın Bana herhangi bir dosya bulmak için çok kolay ve hızlı bir yol vermek için hashmap (onlarca varlık alt klasörlerde yüzlerce dosya var ve AssetManager bununla başa çıkmak için çok beyin ölmüştür). Bu bana dosya ve değer olarak tam yol üzerine kademeli bir harita verir \\

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(); 
    } 
} 

Not kaçan ters bölme.

Klasör listenizi almak için bu yaklaşımı kolayca uyarlayabilirsiniz. Örneğin. Ben bu çalışacaktır emin değilim dir /ad /b /s

+0

Bu çok zekice. Bunu severim. –

0

kullanabilir, ancak Locale.getAvaliableLocales() ile tüm olası dilleri alabilirsiniz ve listedeki her yerel ayar için bazı kaynak (örn app_name) elde etmeye çalışmak. Here olası bir yoldur.

İlgili konular