Answers:
默认值Locale
是在运行时根据系统属性设置为您的应用程序过程静态构造的,因此它将代表启动应用程序时该Locale
设备上的选定对象。通常,这很好,但这确实意味着,如果用户在应用程序运行之后更改其设置,则可能不会立即更新的值。Locale
getDefaultLocale()
如果由于某种原因需要在应用程序中捕获此类事件,则可以尝试Locale
从资源Configuration
对象获取可用事件,即
Locale current = getResources().getConfiguration().locale;
如果您的应用程序需要更改设置,则可能会发现更新该值的速度更快。
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
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;
}
}
LocaleList.getDefault().get(0);
因为这将返回按首选语言排序的语言环境。
ConfigurationCompat
,ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
如果您使用的是Android支持库,则可以使用ConfigurationCompat
@Makalele的方法来代替弃用警告:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
或在科特林:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
从getDefault
的文档:
返回用户的首选语言环境。对于此过程,可能已使用setDefault(Locale)覆盖了此设置。
同样从Locale
文档:
默认语言环境适用于涉及向用户呈现数据的任务。
似乎您应该只使用它。
Locale.setDefault()
,则在至少将设备语言更改回Android 5.0时会调用该断点(就我所测试的而言)
以上所有答案-不起作用。因此,我将在此处放置可在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();
}
}
LocaleListCompat.getDefault()
如果您使用的是AndroidX,也可以使用。
根据官方文档 ConfigurationCompat在支持库中已弃用
您可以考虑使用
LocaleListCompat.getDefault()[0].toLanguageTag()
第0个位置将是用户首选的语言环境
要获得默认语言环境在第0位,将是
LocaleListCompat.getAdjustedDefault()
default()
是一个非常安全的选择,只是不要使用它进行处理(如文档所说)。