获取设备中的当前语言

我们怎样才能获得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