获取应用程序的可用语言

时间:2012-11-23 15:19:26

标签: android localization

我想只获取我的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 个答案:

答案 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是一种可能的方式。