4

我想制作一个小应用程序,只需单击一次或两次,即可在两种、三种或更多种首选语言之间切换系统语言,这些语言是预先从“官方”语言列表中选择的,即出现在“快速设置”>设置 > 语言和输入 > 语言。

如何以编程方式获取此列表?这是可以从 Locale.getAvailableLocales() 获得的语言环境列表吗?我应该从语言环境中获取语言吗?谢谢!

在此处输入图像描述

编辑 - 这是我到目前为止所做的:

  private List<Model> getModel() {
    Locale[] locales = Locale.getAvailableLocales();
    List<Model> list = new ArrayList<Model>();
    for (int i=0; i<locales.length; i++) {
        list.add(get(locales[i].getDisplayLanguage()));
    }
    return list;
  }

  private Model get(String s) {
    return new Model(s);
  }

我现在正在寻找这些选项:

Locale.getDefault().getLanguage()        ---> en     
Locale.getDefault().getISO3Language()    ---> eng
Locale.getDefault().getCountry()         ---> US
Locale.getDefault().getISO3Country()     ---> USA
Locale.getDefault().toString()           ---> en_US
Locale.getDefault().getDisplayLanguage() ---> English
Locale.getDefault().getDisplayCountry()  ---> United States
Locale.getDefault().getDisplayName()     ---> English (United States)

这里

编辑 2 - 2 更多图像,显示语言列表的末尾,其中包含中文选项。

在此处输入图像描述

这是来自系统的列表。

在此处输入图像描述

此列表是使用以下代码完成的:

Locale[] locales = Locale.getAvailableLocales();
List<Model> list = new ArrayList<Model>();
for (int i=0; i<locales.length; i++) {
    list.add(get(locales[i].getDisplayLanguage()+"|"+
            locales[i].toString()+"|"+
            locales[i].getDisplayName()
            ));
}
return list;

现在必须有一种方法可以从第二个列表到达第一个列表,也许访问一些系统隐藏文件?

编辑 3 - 我添加了以下代码,它可以毫无问题地显示中文、葡萄牙文和西班牙文特殊字符 (UTF-8):

list.add(get("Português (Brasil)"));
list.add(get("English (US)"));
list.add(get("中国(简体)"));
list.add(get("Español (Venezuela)"));

现在我如何从这里实际更改系统语言(不打开下面的意图/活动?

Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS);
startActivity(intent);
4

2 回答 2

2

这是获取设备所有可用语言环境的 API。

public static Locale[] getAvailableLocales ()

有关更多信息,请查看此公共链接:http: //developer.android.com/reference/java/util/Locale.html#getAvailableLocales()

于 2014-12-24T03:06:36.920 回答
2

如果您计划支持所有可能的语言组合,那么Locale.getAvailableLocales()可能适合您。

如果没有,那么您需要自己在 Android 应用程序中专门提供语言列表。例如,如果您的应用程序支持加泰罗尼亚语、捷克语、丹麦语和德语(或多种德语口语),您最好ListView使用静态字符串列表填充您的:

public static final String[] LANGS = new String[] {"English (Australia)", "Català (Espanya)","Čeština (Česká Republika)","Dansk (Danmark)","Deutsch (Österreich)","Deutsch (Belgien)","Deutsch (Schweiz)","Deutsch (Deutschland)","Deutsch (Liechtenstein)","Deutsch (Luxemburg)"};

public static final String[] LANG_CODES = new String[] {"en_au", "ca_ES","cs_CZ","da_DK","de_AT","de_BE","de_CH","de_DE","de_LI","de_LU"};

而且,在您的 Android 项目中,您将拥有以下values目录来支持上述语言:

/res/values (English)
/res/values-ca (Catalan)
/res/values-cs (Czech)
/res/values-da (Danish)
/res/values-de (German)
于 2014-12-24T03:19:49.463 回答