获取设备中的当前语言
我们怎样才能获得Android设备中select的当前语言?
如果您想获取设备的选定语言,则可以帮助您:
Locale.getDefault().getDisplayLanguage();
我已经检查了Android 4.1.2设备上的Locale方法,结果如下:
Locale.getDefault().getLanguage() ---> en Locale.getDefault().getISO3Language() ---> eng Locale.getDefault().getCountry() ---> US Locale.getDefault().getISO3Country() ---> USA Locale.getDefault().getDisplayCountry() ---> United States Locale.getDefault().getDisplayName() ---> English (United States) Locale.getDefault().toString() ---> en_US Locale.getDefault().getDisplayLanguage()---> English
对我有效的是:
Resources.getSystem().getConfiguration().locale;
Resource.getSystem()返回一个全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问权限,并且未为当前屏幕configuration(不能使用维度单位,不根据方向等进行更改)。
由于getConfiguration.locale
现在已被弃用,所以在Android Nougat中获取主要语言环境的首选方式是:
Resources.getSystem().getConfiguration().getLocales().get(0);
为了保证与以前的Android版本兼容,一个可能的解决scheme将是一个简单的检查:
Locale locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { locale = Resources.getSystem().getConfiguration().getLocales().get(0); } else { //noinspection deprecation locale = Resources.getSystem().getConfiguration().locale; }
您可以从当前语言环境中提取语言。 您可以通过标准Java API或使用Android上下文来提取区域设置。 例如,下面的两行是等价的:
String locale = context.getResources().getConfiguration().locale.getDisplayName(); String locale = java.util.Locale.getDefault().getDisplayName();
为了节省时间和/或混淆,我想分享一下,我已经尝试了Johan Pelgrim提出的两个备选scheme,在我的设备上它们是等效的 – 不pipe默认位置是否改变。
所以我的设备的默认设置是英语(United Kindom),并且在这种状态下,Johan的答案中的string都给出了相同的结果。 如果我然后改变电话设置(比如说意大利语(意大利语))的语言环境,然后重新运行,Johan的答案中的两个string都将语言环境设置为意大利语(意大利语)。
所以我认为Johan的原帖是正确的,gregm的评论是不正确的。
如Locale引用中所述,获取语言的最佳方式是:
Locale.getDefault().getLanguage()
此方法根据ISO 639-1标准以语言ID返回string
你可以使用这个
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
当“xx”是诸如“en”,“fr”,“sp”,“ar”等等的任何语言代码时
添加到Johan Pelgrim的答案
context.getResources().getConfiguration().locale Locale.getDefault()
是相等的,因为android.text.format.DateFormat
类可以交替使用,例如
private static String zeroPad(int inValue, int inMinDigits) { return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue); }
和
public static boolean is24HourFormat(Context context) { String value = Settings.System.getString(context.getContentResolver(), Settings.System.TIME_12_24); if (value == null) { Locale locale = context.getResources().getConfiguration().locale; // ... snip the rest ... }
您可以尝试从系统资源获取语言环境:
PackageManager packageManager = context.getPackageManager(); Resources resources = packageManager.getResourcesForApplication("android"); String language = resources.getConfiguration().locale.getLanguage();
有两种语言。
操作系统的默认语言:
Locale.getDefault().getDisplayLanguage();
当前的应用语言:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
您可以使用此代码来查找键盘电stream
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodSubtype ims = imm.getCurrentInputMethodSubtype(); String locale = ims.getLocale();
上面的答案不区分简单的中文和传统的中文。 Locale.getDefault().toString()
工作返回“zh_CN”,“zh_TW”,“en_US”等。
参考: https : //developer.android.com/reference/java/util/Locale.html,ISO 639-1是旧的。
如果你select一种语言你不能input这个希腊语可能会有所帮助。
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
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ // your code here }
获取设备语言的正确方法如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return context.getResources().getConfiguration().getLocales().get(0); } else { return context.getResources().getConfiguration().locale; }
希望能帮助到你。
我的解决scheme是这样的
@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()); }
显示—> en