获取应用程序的可用语言

nic*_*are 13 android localization

我想只获取我的Android应用程序的可用语言,即我在res文件夹中有一个名为values-(例如values-en,values-fr)的文件夹.

我不想存储语言代码,我想列出表格值的"res"的所有子文件夹 - *并从他们的名字中取出语言代码.(最终检查代码是否在Locale.getAvailableLocales()返回的数组中,以确保它是正确的).这个想法在这里说明如何获得可用的语言(不是所有语言,只是我的应用程序上可用的语言).

我试过用

getResources().getAssets().list("res"); getResources().getAssets().list("/res"); 
getResources().getAssets().list("/res/");
Run Code Online (Sandbox Code Playgroud)

但他们都没有工作.

你知道如何列出"res"文件夹的子文件夹吗?

先感谢您.

Sim*_*mon 2

我不知道有什么直接的方法可以做到这一点,但我已经对资产文件夹做了类似的事情,应该可以正常工作。我在 Windows 上使用 IntelliJ IDEA 和 ANT 进行构建,但您应该能够针对 Eclipse 或其他 IDE 和 *nix/OSX 进行调整。

在编译之前,我使用 ANT 构建方面运行 dir 命令来列出资产文件夹中的所有文件并将输出通过管道传输到文本文件:

dir /assets /s /b > /res/raw/filelist.txt
Run Code Online (Sandbox Code Playgroud)

然后,我将 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();
   }
}
Run Code Online (Sandbox Code Playgroud)

注意转义的反斜杠,\\

这给了我一个以文件名和完整路径为值的映射。

您可以轻松地采用这种方法来获取文件夹列表。例如你可能会使用dir /ad /b /s