我想只获取我的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”文件夹的子文件夹?
提前谢谢。
答案 0 :(得分:2)
我不知道直接这样做的方法,但是我对资产文件夹做了类似的事情应该可以正常工作。我在Windows上使用IntelliJ IDEA和ANT进行构建,但您应该能够将其用于Eclipse或其他IDE和* nix / OSX。
在编译之前,我使用ANT构建方面来运行dir命令来列出assets文件夹中的所有文件,并将输出传递给文本文件:
dir /assets /s /b > /res/raw/filelist.txt
然后我将filelist.txt读入一个hashmap,为我提供了一个非常简单快捷的方法来查找任何文件(我在数十个资源子文件夹中有数百个文件,而且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
答案 1 :(得分:0)
我不确定这是否有效,但您可以使用Locale.getAvaliableLocales()
获取所有可能的语言,并尝试为列表中的每个区域设置获取一些资源(例如app_name
)。 Here是一种可能的方式。