347

如何在 Android 中获取用户当前的语言环境?

我可以得到默认的,但这可能不是当前的正确的?

基本上我想要来自当前语言环境的两个字母的语言代码。不是默认的。没有Locale.current()

4

9 回答 9

542

默认值Locale是在运行时从系统属性设置为您的应用程序进程静态构建的,因此它将表示应用程序启动时Locale在该设备上选择的。通常,这很好,但这确实意味着如果用户在您的应用程序进程运行后更改他们的设置,可能不会立即更新的值。LocalegetDefaultLocale()

如果您出于某种原因需要在应用程序中捕获此类事件,则可以尝试Locale从资源Configuration对象中获取可用的事件,即

Locale current = getResources().getConfiguration().locale;

如果您的应用程序需要更改设置,您可能会发现此值更新得更快。

于 2013-01-17T22:53:10.567 回答
212

Android N(Api 级别 24)更新(无警告):

   Locale getCurrentLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }
于 2016-09-22T12:29:24.070 回答
88

如果您使用的是 Android 支持库,则可以使用ConfigurationCompat而不是 @Makalele 的方法来摆脱弃用警告:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

或在 Kotlin 中:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
于 2018-03-13T12:55:18.167 回答
13

来自getDefault的文档:

返回用户的首选语言环境。对于此进程,这可能已被 setDefault(Locale) 覆盖。

同样来自Locale文档:

默认语言环境适用于涉及向用户呈现数据的任务。

看来您应该只使用它。

于 2013-01-17T22:46:53.910 回答
8

以上所有答案 - 不起作用。所以我会在这里放一个适用于 4 和 9 android 的函数

private String getCurrentLanguage(){
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
      return LocaleList.getDefault().get(0).getLanguage();
   } else{
      return Locale.getDefault().getLanguage();
   }
}
于 2019-12-06T09:09:11.370 回答
4

根据官方文档 ConfigurationCompat在支持库中已弃用

你可以考虑使用

LocaleListCompat.getDefault()[0].toLanguageTag()第 0 位将是用户首选的语言环境

要在第 0 位获得默认语言环境将是 LocaleListCompat.getAdjustedDefault()

于 2020-01-22T15:24:03.300 回答
2

我用过这个:

String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
   //do something
}
于 2020-01-24T12:16:21.053 回答
2

就目前而言,我们可以使用ConfigurationCompat类来避免警告和不必要的样板。

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
于 2021-05-24T05:42:13.193 回答
0

我使用了这个简单的代码:

if(getResources().getConfiguration().locale.getLanguage().equalsIgnoreCase("en"))
{
   //do something
}
于 2022-01-25T07:20:57.587 回答