如何获取用户在Android中的当前区域设置?我可以得到默认的,但这可能不是当前的,对吗?基本上,我需要当前语言环境中的两个字母的语言代码。不是默认的。没有Locale.current()
Locale.current()
tyu7yeag1#
默认的Locale是在运行时通过系统属性设置为应用程序进程静态构造的,因此它将表示应用程序启动时在该设备上选择的Locale。通常情况下,这很好,但这确实意味着如果用户在应用程序进程运行后更改其Locale设置,getDefaultLocale()的值可能不会被立即更新。如果出于某种原因需要在应用程序中捕获此类事件,则可以尝试从资源Configuration对象获取Locale,即
Locale
getDefaultLocale()
Configuration
Locale current = getResources().getConfiguration().locale;
您可能会发现,如果应用程序需要更改设置,则更改设置后此值的更新速度会更快。
根据评论更新〉API 24
Locale current = getResources().getConfiguration().getLocales().get(0) // is now the preferred accessor.
wf82jlnq2#
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; } }
x7rlezfr3#
如果您使用的是Android支持库,则可以使用ConfigurationCompat代替@Makalele的方法来消除弃用警告:
ConfigurationCompat
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
或在Kotlin:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
jvlzgdj94#
来自getDefault的文档:返回用户的首选区域设置。对于此进程,此选项可能已被setDefault(Locale)覆盖。同样来自Locale文档:默认区域设置适用于涉及向用户显示数据的任务。看来你应该用它。
getDefault
qrjkbowd5#
以上所有答案-不工作。所以我会在这里放一个功能,在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(); } }
55ooxyrt6#
根据官方documentationConfigurationCompat在支持库中已弃用您可以考虑使用LocaleListCompat.getDefault()[0].toLanguageTag()第0个位置将是用户首选区域设置若要获取第0个位置的默认区域设置,则应为LocaleListCompat.getAdjustedDefault()
LocaleListCompat.getDefault()[0].toLanguageTag()
LocaleListCompat.getAdjustedDefault()
ftf50wuq7#
就目前而言,我们可以使用ConfigurationCompat类来避免警告和不必要的样板。
qni6mghb8#
我用过这个:
String currentLanguage = Locale.getDefault().getDisplayLanguage(); if (currentLanguage.toLowerCase().contains("en")) { //do something }
guicsvcw9#
我用了这个简单的代码:
if(getResources().getConfiguration().locale.getLanguage().equalsIgnoreCase("en")) { //do something }
9条答案
按热度按时间tyu7yeag1#
默认的
Locale
是在运行时通过系统属性设置为应用程序进程静态构造的,因此它将表示应用程序启动时在该设备上选择的Locale
。通常情况下,这很好,但这确实意味着如果用户在应用程序进程运行后更改其Locale
设置,getDefaultLocale()
的值可能不会被立即更新。如果出于某种原因需要在应用程序中捕获此类事件,则可以尝试从资源
Configuration
对象获取Locale
,即您可能会发现,如果应用程序需要更改设置,则更改设置后此值的更新速度会更快。
根据评论更新〉API 24
wf82jlnq2#
Android N(API级别24)更新(无警告):
x7rlezfr3#
如果您使用的是Android支持库,则可以使用
ConfigurationCompat
代替@Makalele的方法来消除弃用警告:或在Kotlin:
jvlzgdj94#
来自
getDefault
的文档:返回用户的首选区域设置。对于此进程,此选项可能已被setDefault(Locale)覆盖。
同样来自
Locale
文档:默认区域设置适用于涉及向用户显示数据的任务。
看来你应该用它。
qrjkbowd5#
以上所有答案-不工作。所以我会在这里放一个功能,在4和9 Android上工作
55ooxyrt6#
根据官方documentationConfigurationCompat在支持库中已弃用
您可以考虑使用
LocaleListCompat.getDefault()[0].toLanguageTag()
第0个位置将是用户首选区域设置若要获取第0个位置的默认区域设置,则应为
LocaleListCompat.getAdjustedDefault()
ftf50wuq7#
就目前而言,我们可以使用
ConfigurationCompat
类来避免警告和不必要的样板。qni6mghb8#
我用过这个:
guicsvcw9#
我用了这个简单的代码: