2012-11-23 11 views
13

私のAndroidアプリケーションに使用できる言語、つまりres-フォルダにvalues-という名前のフォルダ(例:values-en、values-fr)がある言語のみを取得します。アプリケーションの利用可能な言語を取得する

私は言語コードを保存したくないので、フォームの値 "*"の "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

これを行う直接的な方法はわかりませんが、正常に動作するはずのassetsフォルダで同様のことを行っています。私はIntelliJ IDEAとANTをWindowsで使用していますが、Eclipseや他のIDEや* nix/OSXにも対応できるはずです。

コンパイルする前に、私は、テキストファイルに資産フォルダや配管内のすべてのファイル出力を一覧表示するには、dirコマンドを実行するために、ANTビルドファセットを使用します。

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が可能です。

関連する問題