studio mini idioma home google cambiar android localization

mini - cambiar idioma ide android studio



Obtén el idioma actual en el dispositivo (20)

¿Cómo podemos obtener el idioma actual seleccionado en el dispositivo Android?


Aquí está el código para obtener el país del dispositivo. Compatible con todas las versiones de Android incluso oreo.

Solución: si el usuario no tiene una tarjeta SIM que no sea el país, se usa durante la configuración del teléfono o la selección de idioma actual.

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; }


Como se describe en Referencia regional, la mejor manera de obtener el idioma es:

Locale.getDefault().getLanguage()

este método devuelve una cadena con id de idioma de acuerdo con la norma ISO 639-1


Hay dos idiomas.

Idioma predeterminado del sistema operativo:

Locale.getDefault().getDisplayLanguage();

Idioma actual de la solicitud:

getResources().getConfiguration().locale.getDisplayLanguage();//return string


He comprobado los métodos Locale en mi dispositivo Android 4.1.2 y los resultados:

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


La forma correcta de obtener el idioma de su dispositivo es la siguiente:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return context.getResources().getConfiguration().getLocales().get(0); } else { return context.getResources().getConfiguration().locale; }

Espero eso ayude.



Lo que funcionó para mí fue:

Resources.getSystem().getConfiguration().locale;

Resource.getSystem () devuelve un objeto de recursos compartidos globales que proporciona acceso solo a los recursos del sistema (no a los recursos de la aplicación) y no está configurado para la pantalla actual (no puede usar unidades de dimensión, no cambia según la orientación, etc.).

Debido a que getConfiguration.locale ahora ha quedado en desuso, la forma preferida de obtener la configuración regional principal en Android Nougat es:

Resources.getSystem().getConfiguration().getLocales().get(0);

Para garantizar la compatibilidad con las versiones anteriores de Android, una posible solución sería una simple comprobación:

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; }

Actualizar

A partir de la biblioteca de soporte 26.1.0 , no es necesario que compruebe la versión de Android, ya que ofrece un método conveniente compatible con versiones anteriores de getLocales() .

Simplemente llame:

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());


Mi solución es así.

@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); }

y entonces

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Log.e("Locale", getCurrentLocale().getLanguage()); } else { Log.e("Locale", getCurrentLocale2().toString()); }

se muestra ---> en


Para agregar a la respuesta de Johan Pelgrim

context.getResources().getConfiguration().locale Locale.getDefault()

son equivalentes porque la clase android.text.format.DateFormat usa ambos intercambiablemente, por ejemplo,

private static String zeroPad(int inValue, int inMinDigits) { return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue); }

y

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 ... }


Para ahorrar tiempo y / o confusión a otros, quería compartir que he probado las dos alternativas propuestas por Johan Pelgrim arriba y en mi dispositivo son equivalentes, ya sea que se cambie o no la ubicación predeterminada.

Así que la configuración predeterminada de mi dispositivo es el inglés (United Kindom) y en este estado, como se esperaba, ambas cadenas en la respuesta de Johan dan el mismo resultado. Si luego cambio la configuración regional en la configuración del teléfono (por ejemplo, a italiano (Italia)) y vuelvo a ejecutar, entonces las dos cadenas en la respuesta de Johan dan la configuración regional como italiano (Italia).

Por lo tanto, creo que la publicación original de Johan es correcta y el comentario de gregm es incorrecto.


Puede ''extraer'' el idioma de la configuración regional actual. Puede extraer la configuración regional mediante la API de Java estándar o utilizando el contexto de Android. Por ejemplo, las dos líneas de abajo son equivalentes:

String locale = context.getResources().getConfiguration().locale.getDisplayName(); String locale = java.util.Locale.getDefault().getDisplayName();


Puede intentar obtener la configuración regional de los recursos del sistema:

PackageManager packageManager = context.getPackageManager(); Resources resources = packageManager.getResourcesForApplication("android"); String language = resources.getConfiguration().locale.getLanguage();


Puedes usar este código para averiguar el teclado actual.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodSubtype ims = imm.getCurrentInputMethodSubtype(); String locale = ims.getLocale();


Puedes usar esto

boolean isLang = Locale.getDefault().getLanguage().equals("xx");

cuando "xx" es cualquier código de idioma como "en", "fr", "sp", "ar" .... y así sucesivamente


Si desea obtener el idioma seleccionado de su dispositivo, esto podría ayudarlo a:

Locale.getDefault().getDisplayLanguage();


Si desea realizar una tarea específica para los usuarios que residen en la India que habla hindi, utilice la siguiente información si la condición es

if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ //Block executed only for the users resides in India who speaks Hindi }


Si elige un idioma, no puede escribir este griego puede ser útil.

getDisplayLanguage().toString() = English getLanguage().toString() = en getISO3Language().toString() = eng getDisplayLanguage()) = English getLanguage() = en getISO3Language() = eng

Ahora inténtalo con griego

getDisplayLanguage().toString() = Ελληνικά getLanguage().toString() = el getISO3Language().toString() = ell getDisplayLanguage()) = Ελληνικά getLanguage() = el getISO3Language() = ell


si el nivel de API es 24 o superior, use LocaleList.getDefault().get(0).getLanguage() o use Locale.getDefault.getLanguage()

private fun getSystemLocale(): String { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return LocaleList.getDefault()[0].language } else { return Locale.getDefault().language } }

referencia: https://developer.android.com/guide/topics/resources/multilingual-support


Locale.getDefault().getDisplayLanguage()

le dará un nombre Written para el idioma, por ejemplo, English, Dutch, French

Locale.getDefault().getLanguage()

le dará un language code , por ejemplo: en, nl, fr

Ambos métodos devuelven cadena


if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ // your code here }