我们如何获取Android设备中当前选择的语言?
我们如何获取Android设备中当前选择的语言?
getDisplayLanguage().toString() = English
getLanguage().toString() = en
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng
getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
有两种语言。
操作系统默认语言:
Locale.getDefault().getDisplayLanguage();
应用程序当前的语言:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
Locale.getDefault().getDisplayLanguage()
会为语言提供书面
名称,例如英语、荷兰语、法语
Locale.getDefault().getLanguage()
会给你一个语言代码
,例如:en, nl, fr
这两种方法都返回字符串
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.getResources().getConfiguration().getLocales().get(0);
} else {
return context.getResources().getConfiguration().locale;
}
Locale.getDefault().getCountry()
你可以使用 .setLanguage(Locale.forLanguageTag(Locale.getDefault().getLanguage())); 这很好
@Composable
内部提供了一个更新的答案。val locale = Locale.current
// locale.language
以下是获取设备国家代码的代码。适用于所有版本的安卓,包括奥利奥。
解决方案:如果用户没有SIM卡,则获取他在手机设置期间使用的国家或当前语言选择。
public static String getDeviceCountry(Context context) {
String deviceCountryCode = null;
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if(tm != null) {
deviceCountryCode = tm.getNetworkCountryIso();
}
if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
deviceCountryCode = deviceCountryCode.toUpperCase();
}
else {
deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
}
// Log.d("countryCode"," : " + deviceCountryCode );
return deviceCountryCode;
}
我的解决方案是这样的
@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
return Resources.getSystem().getConfiguration().locale.getLanguage();
}
@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
getResources();
return Resources.getSystem().getConfiguration().getLocales().get(0);
}
然后
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.e("Locale", getCurrentLocale().getLanguage());
} else {
Log.e("Locale", getCurrentLocale2().toString());
}
显示 ---> 中文
如果您使用Jetpack Compose
在可组合的函数内部
Context.applicationContext.resources.configuration.locales.get(0).language