Quiero permitir que el usuario cambie el idioma de mi aplicación mediante el uso de una ruleta (o de cualquier forma). Intenté de muchas maneras pero cambian el lenguaje de esta actividad, no todas las actividades, y quiero guardarlo para que cuando el usuario reinicie la aplicación, encuentre el último idioma elegido.Android cómo cambiar el idioma de la aplicación en tiempo de ejecución
Respuesta
puede utilizar este código en spinner o cualquier forma que desee
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
entonces usted debe guardar el idioma como esto
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad);
editor.commit();
y el uso el mismo código en cada actividad en onCreate()
para cargar el languageToLoad
de las Preferencias Compartidas
Use SharedPreferences para hacer un seguimiento del idioma que el usuario eligió, y luego configure las actividades para usar ese idioma en el método onCreate(), y tal vez onResume(). De esta manera se mantendrá en los reinicios de aplicaciones etc.
Si todo el desarrollador utiliza de esta forma las aplicaciones, creo que no está muy claro. –
No puedo hablar por otros desarrolladores, ya que no tengo acceso a su codem –
Bueno, sí, esta es la forma más recomendada y más limpia de pasar la información que tiene en una actividad a otras actividades. La otra forma más hacky/no apropiada de hacerlo es mantener los datos como un campo estático en la Actividad, y acceder a ellos desde otras actividades, pero si alguien pregunta, ¡no te lo dije! :) –
Esta es una vieja pregunta, pero la responderé de todos modos: -) Puede extender la clase de aplicación para aplicar la solución de Abol3z en cada actividad. Crear clase:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
Y establecer MyApplication como clase de aplicación en el manifiesto:
<application
android:name=".MyApplication"
...
/>
Puede establecer el valor lang (en su spinner):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
De acuerdo con la [documentación] (https://developer.android.com/reference/android/app/Application.html#onCreate()) la aplicación onCreate() se invoca solo al inicio de la aplicación . Entonces, realmente no estás cambiando el idioma en tiempo de ejecución, pero en el siguiente inicio de la aplicación, ¿verdad? Editar: vuelve a leer la pregunta original, tu manera de resolver el problema después de todo. – Micha
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
usamos dos idiomas para fines de prueba. mantenga toda la cadena en una carpeta diferente llamada valores y valores-bn.
- 1. Cambiar el idioma de NSLocalizedString() en tiempo de ejecución
- 2. Cambiar la orientación en tiempo de ejecución
- 3. WPF: Cómo cambiar la CurrentUICulture en tiempo de ejecución
- 4. ¿Cómo cambio el Administrador de recursos actual en tiempo de ejecución para cambiar de idioma?
- 5. Cómo cambiar el idioma en tiempo de ejecución sin problemas de diseño
- 6. Android: cambiar el color de forma en tiempo de ejecución
- 7. Forma correcta de cambiar el idioma en el tiempo de ejecución
- 8. ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- 9. Android - Cambiar diseño de fragmento en tiempo de ejecución
- 10. cómo cambiar los errores de tiempo de ejecución en inglés
- 11. ¿Cómo cambiar CurrentCulture en tiempo de ejecución?
- 12. Lenguaje basado en JVM sin tiempo de ejecución de idioma
- 13. Cambiar el idioma de la aplicación iOS sobre la marcha
- 14. Cómo cambiar sql_mode en el tiempo de ejecución
- 15. Cambiar el idioma de descripción predeterminado de la aplicación
- 16. Configurar la aplicación Idioma en Android Preferencias
- 17. Cómo cambiar la extensión de archivo en tiempo de ejecución
- 18. Cambiar el idioma de la aplicación mediante programación
- 19. ¿Cómo puedo cambiar el idioma de mi aplicación?
- 20. Android: ¿Hay alguna forma de cambiar el idioma predeterminado de Android a un nuevo idioma?
- 21. ¿Cómo cambiar el nombre de la aplicación en el Iniciador en Android según el idioma seleccionado en Configuración del teléfono?
- 22. ¿Cómo cambiar el idioma predeterminado de ANDROID Emulator?
- 23. ¿Es posible cambiar el ancho y la altura del diseño en Android en tiempo de ejecución?
- 24. Cambiar la configuración regional en tiempo de ejecución en Swing
- 25. Cambiar fuente en tiempo de ejecución
- 26. Cambiar el título de MenuItem en tiempo de ejecución
- 27. Localización en tiempo de ejecución
- 28. Cómo cambio la cultura de una aplicación WinForms en tiempo de ejecución
- 29. cambio y aplicar tema en tiempo de ejecución en Android
- 30. Cambiar de idioma de programa en un dispositivo Android
¿Cambiará esto lang en todo el sistema de Android o solo cambiará para la aplicación? Estoy pidiendo esto para que cuando el usuario se vaya de la aplicación, pueda continuar con la configuración predeterminada de Android –
@KarueBensonKarue, cambiará solo en la aplicación. –
Bien, gracias por su respuesta –