13

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

我不想存储语言代码,我想列出表单 values-* 的“res”的所有子文件夹,并从它们的名称中获取语言代码。(最终检查代码是否在 Locale.getAvailableLocales() 返回的数组中,以确保它是正确的)。此处说明了这个想法如何获取可用的语言(不是全部,只是我的应用程序上可用的语言)

我试过使用

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

但他们都没有工作。

您知道如何列出“res”文件夹的子文件夹吗?

先感谢您。

4

2 回答 2

2

我不知道这样做的直接方法,但我对 assets 文件夹做了类似的事情,应该可以正常工作。我在 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

于 2012-11-23T16:19:53.997 回答
0

我不确定这是否可行,但您可以使用所有可能的语言Locale.getAvaliableLocales()并尝试为app_name列表中的每个语言环境获取一些资源(例如)。是一种可能的方法。

于 2012-11-23T17:58:24.143 回答