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.
Las respuestas anteriores no distinguen entre chino simple y chino tradicional. Locale.getDefault().toString()
funciona que devuelve "zh_CN", "zh_TW", "en_US" y etc.
Referencias a: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 es ANTIGUO.
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
}