如何在 Android 中获取用户当前的语言环境?
我可以得到默认的,但这可能不是当前的正确的?
基本上我想要来自当前语言环境的两个字母的语言代码。不是默认的。没有Locale.current()
默认值Locale
是在运行时从系统属性设置为您的应用程序进程静态构建的,因此它将表示应用程序启动时Locale
在该设备上选择的。通常,这很好,但这确实意味着如果用户在您的应用程序进程运行后更改他们的设置,可能不会立即更新的值。Locale
getDefaultLocale()
如果您出于某种原因需要在应用程序中捕获此类事件,则可以尝试Locale
从资源Configuration
对象中获取可用的事件,即
Locale current = getResources().getConfiguration().locale;
如果您的应用程序需要更改设置,您可能会发现此值更新得更快。
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;
}
}
如果您使用的是 Android 支持库,则可以使用ConfigurationCompat
而不是 @Makalele 的方法来摆脱弃用警告:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
或在 Kotlin 中:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
来自getDefault
的文档:
返回用户的首选语言环境。对于此进程,这可能已被 setDefault(Locale) 覆盖。
同样来自Locale
文档:
默认语言环境适用于涉及向用户呈现数据的任务。
看来您应该只使用它。
以上所有答案 - 不起作用。所以我会在这里放一个适用于 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();
}
}
根据官方文档 ConfigurationCompat在支持库中已弃用
你可以考虑使用
LocaleListCompat.getDefault()[0].toLanguageTag()
第 0 位将是用户首选的语言环境
要在第 0 位获得默认语言环境将是
LocaleListCompat.getAdjustedDefault()
我用过这个:
String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
//do something
}
就目前而言,我们可以使用ConfigurationCompat
类来避免警告和不必要的样板。
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
我使用了这个简单的代码:
if(getResources().getConfiguration().locale.getLanguage().equalsIgnoreCase("en"))
{
//do something
}