【问题标题】:Get available languages for an application获取应用程序的可用语言
【发布时间】:2012-11-23 15:19:25
【问题描述】:

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

我不想存储语言代码,我想列出表单 values-* 的“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”文件夹的子文件夹吗?

提前谢谢你。

【问题讨论】:

    标签: android localization


    【解决方案1】:

    我不知道执行此操作的直接方法,但我对 assets 文件夹做了类似的事情,应该可以正常工作。我在 Windows 上使用 IntelliJ IDEA 和 ANT 进行构建,但您应该能够将其用于 Eclipse 或其他 IDE 和 *nix/OSX。

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

    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

    【讨论】:

    • 这很聪明。我喜欢这个。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多