2012-11-23 22 views
13

我想僅獲取適用於我的android應用程序的可用語言,即在res文件夾中有一個名爲values-(例如values-en,values-fr)的文件夾。獲取應用程序的可用語言

我不想存儲語言代碼,我想列出表單values-*中「res」的所有子文件夾,並從它們的名稱中提取語言代碼。 (最終檢查代碼是否在由Locale.getAvailableLocales()返回的數組中,以確保它是正確的)。這個想法在這裏陳述How to get the available languages (Not all of them, just the languages available on my app)

我一直在使用

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

嘗試,但沒有一次成功。

你知道如何列出「res」文件夾的子文件夾嗎?

預先感謝您。

回答

2

我不知道有一個直接的方法來做到這一點,但我做了一個類似的事情,應該可以正常工作的資產文件夾。我在Windows上爲我的建築使用IntelliJ IDEA和ANT,但您應該能夠將其適用於Eclipse或其他IDE以及* nix/OSX。

編譯之前,我使用Ant構建方面運行dir命令列出的資產文件夾和管道中的所有文件輸出到一個文本文件中:

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

我然後讀Filelist.txt中成哈希映射給我非常簡單快捷的方式來找到任何文件(我有幾十個資產子文件夾中的數百個文件,而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

+0

這很聰明。我喜歡這個。 –

0

我不知道這會工作,但你可以得到所有可能的語言與Locale.getAvaliableLocales()並試圖得到一些資源(例如app_name)在列表中的每個區域。 Here是一種可能的方法。