¿Cómo obtener el idioma (configuración regional) que muestra actualmente la aplicación para Android?
¿Cómo llegar a conocer el idioma (locale) actualmente la aplicación de Android utiliza para mostrar textos al usuario?
Sé que puedo usar Locale.getDefault()
para obtener la configuración predeterminada de OS. Pero puede diferir de la configuración regional utilizada por la aplicación para mostrar texto y otros recursos, si esta configuración regional no es compatible con la aplicación.
- Android cambia y establece la configuración regional predeterminada dentro de la aplicación
- Adición de cotizaciones en Java
- Haciendo clic en un botón para cambiar el idioma
- Cambiar idioma mediante programación en Android
- Cocos2d-x localización simplificado / chino tradicional
Tengo que determinar el idioma (locale) que muestra la aplicación, por lo que la aplicación puede pasar el idioma al servidor, por lo que puede localizar los resultados devueltos.
- Cómo formatear un valor de flotador con el formato de moneda del dispositivo?
- ¿Por qué podría Resources.getString () devolver intermitentemente cadenas de la configuración regional equivocada?
- Quiero mostrar el idioma Reginonal (Gurumukhi) en mi aplicación para Android
- Valores de localización de Android - ** nombres de carpeta
- ¿De dónde viene la ubicación y la ubicación actual de Bestest? En Android Dev Guide (Obtención de la ubicación del usuario)
- Aplicación de Android con ActionBar NullPointerException con configuración regional no predeterminada
- Mostrar fecha en la ubicación actual
- Configurar el idioma de la aplicación en Preferencias de Android
Mi propia solución es añadir a strings.xml
key-value par locale=<locale code>
, así context.getResources().getString(R.string.locale)
devolverá el código de configuración regional específico para la configuración regional utilizada.
Está en la configuración de tu aplicación, para que puedas obtenerla con:
getResources().getConfiguration().locale
Esto es diferente de
Locale.getDefault()
Y muestra la configuración regional que utiliza la aplicación y que puede ser diferente.
Puede ser diferente porque el desarrollador puede cambiarlo actualizando la configuración de la aplicación, compruebe: Resources.updateConfiguration
El siguiente código funciona para mí:
@TargetApi(Build.VERSION_CODES.M) private String getCurrentDefaultLocaleStr(Context context) { Locale locale = context.getResources().getConfiguration().locale; return locale.getDefault().toString(); }
Nota: hay un ligero cambio en la forma en que debe obtener la configuración regional en Build.VERSION_CODES.N. Para N y encima, el código debe verse como el bloque de código a continuación; Sin embargo, sólo lo hago por M y por debajo como en el bloque de código anterior y es compatible para N y arriba también.
// Build.VERSION_CODES.N Locale locale = context.getResources().getConfiguration().getLocales().get(0);
Tengo lo siguiente en los idiomas nacionales que apoyo:
English: en Traditional Chinese: zh_TW_#Hant Simplified Chinese: zh_CN_#Hans Spanish: es_ES French: fr_FR Japanese: ja_JP German: de_DE
Hay una lista de métodos que proporcionan la misma información de configuración regional en diferentes formatos:
Locale.getDefault (). GetCountry ();
Locale.getDefault (). GetISO3Language ();
Locale.getDefault (). GetISO3Country ();
Locale.getDefault (). GetDisplayCountry ();
Locale.getDefault (). GetDisplayName ();
Locale.getDefault (). GetDisplayLanguage ();
Locale.getDefault (). GetLanguage ();
Locale.getDefault (). ToString ();
Puede utilizar el código de abajo. Por ejemplo, las funciones presentadas a continuación pueden colocarse dentro de la clase extendida de la clase Application.
public class MyApplication extends Application { ... public static String APP_LANG; private Context ctx = getBaseContext(); private Resources res = ctx.getResources(); public SharedPreferences settingPrefs; ... public void restoreAppLanguage(){ /** *Use this method to store the app language with other preferences. *This makes it possible to use the language set before, at any time, whenever *the app will started. */ settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE); String lang = settingPrefs.getString("AppLanguage", ""); if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){ Locale myLocale; myLocale = new Locale(lang); Locale.setDefault(myLocale); Configuration config = new Configuration(); config.locale = myLocale; res.updateConfiguration( config, res.getDisplayMetrics() ); } } public void storeAppLanguage(int lang) { /** *Store app language on demand */ settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE); Editor ed = settingPrefs.edit(); Locale myLocale; myLocale = new Locale(lang); Locale.setDefault(myLocale); Configuration config = new Configuration(); config.locale = myLocale; res.updateConfiguration( config, res.getDisplayMetrics() ); ed.putString("AppLanguage", lang); ed.commit(); } public void setAppLanguage(String lang){ /** *Use this method together with getAppLanguage() to set and then restore *language, whereever you need, for example, the specifically localized *resources. */ Locale myLocale; myLocale = new Locale(lang); Locale.setDefault(myLocale); Configuration config = new Configuration(); config.locale = myLocale; res.updateConfiguration( config, res.getDisplayMetrics() ); } public void getAppLanguage(){ /** *Use this method to obtain the current app language name */ settingPrefs = getSharedPreferences("ConfigData",MODE_PRIVATE); String lang = settingPrefs.getString("AppLanguage", ""); if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){ APP_LANG = lang; } else APP_LANG = Locale.getDefault().getLanguage(); } }
Y entonces dondequiera que en el código principal podemos escribir:
public class MainActivity extends ActionBarActivity { ... MyApplication app; ... @Override protected void onCreate(Bundle savedInstanceState) { ... app = (MyApplication)getApplicationContext(); ... if(settingPrefs.getAll().isEmpty()){ //Create language preference if it is not app.storeAppLanguage(Locale.getDefault().getLanguage()); } //Restore previously used language app.restoreAppLanguage(); ... } ... void SomethingToDo(){ String lang = "en"; //"fr", "de", "es", "it", "ru" etc. ... app.getAppLanguage(); app.setAppLanguage(lang); ... //do anything ... app.setAppLanguage(app.APP_LANG); } ... }
En su caso, usted, en breve, puede utilizar getAppLanguage()
y luego comprobar la variable pública APP_LANG
para obtener qué idioma se utiliza actualmente.
public boolean CheckLocale(Context context, String app_language) { Locale myLocale = new Locale(app_language); Resources res = context.getResources(); Configuration conf = res.getConfiguration(); conf.locale = myLocale; if(res.getConfiguration().locale==myLocale) return true; else return false; }
Utilice este método.
- Obtener la ubicación seleccionada de la actividad de Google Maps
- Android – proveedor de archivos – permiso de denegación