获取应用程序可用的语言

13
我想要获取我Android应用程序中仅可用的语言,即那些在res文件夹中拥有命名为values-(例如values-en, values-fr)的文件夹的语言。
我不想存储语言代码,并且打算列出所有形式为values-*的子文件夹,从它们的名称中取出语言代码。(最终检查该代码是否在Locale.getAvailableLocales()返回的数组中,以确保其正确)。这个想法在这里提出:如何获取可用的语言(不是全部语言,只是我的应用程序可用的语言)
我尝试过使用:
getResources().getAssets().list("res"); getResources().getAssets().list("/res"); 
getResources().getAssets().list("/res/");

但是它们都没有奏效。

你有任何想法如何列出“res”文件夹的子文件夹吗?

提前谢谢。

2个回答

2

我不知道有没有直接的方法来做到这一点,但是我已经使用资产文件夹做了类似的事情,应该可以很好地工作。我在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


这非常聪明。我喜欢这个。 - Russell Stewart

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接