2011-06-20 33 views
6

Me gustaría que el idioma de la aplicación se establezca de acuerdo con las preferencias del usuario, pero hasta ahora no funciona como me gustaría.Configurar la aplicación Idioma en Android Preferencias

Establecí los valores predeterminados: strings.xml y también values-es con un strings.xml dentro de español. Tengo una opción de menú que lleva al usuario a una actividad de preferencia donde puede elegir otras cosas.

Así que aquí están algunos extractos del código:

public class Preference extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 
...... 
// Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 


...} 
//(......) 

//and here I have the listener so when the language pref changes value the locale gets changed. 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     if (key.equals("listPref2")) { 
      String idioma = sharedPreferences.getString("listPref2", "catala"); 
      if ("castella".equals(idioma)) { 
       idioma = "es_ES"; 

       Locale locale = new Locale(idioma); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getApplicationContext().getResources().updateConfiguration(config, 
         getBaseContext().getResources().getDisplayMetrics()); 
      } 
     } 
    } 

Así que cuando se cambia el idioma funciona pero luego cuando vuelva más tarde o reiniciar el emulador de la lengua vuelve a regional predeterminada del en_US y la el idioma de la aplicación se vuelve a cambiar a los valores predeterminados de nuevo. ¿Qué puedo hacer para solucionarlo?

Sé que puedo obtener esta preferencia (a la que puedo acceder desde todas mis actividades) y luego, cada vez que configuro la configuración regional, pero me parece un poco pesada, ¿hay alguna manera de hacerlo en un manera elegante?

Lo que me gustaría hacer es si el usuario configura el idioma, por lo que cuando regrese 2 días después no tenga que volver a cambiar el idioma.

¿Alguna idea?

Respuesta

11

OK puede ayudar a alguien. He añadido el folowing a la principal manifiesta actividad:

android:configChanges="locale"

Luego, cuando el usuario decide las preferencias He puesto un botón de confirmación y luego este botón te lleva a la actividad principal que es la razón por la lnagages consigue restablecen.

tengo una clase estática en la que tengo el código para cambiar la configuración regional:

public static void updateLanguage(Context context, String idioma) { 
    if (!"".equals(idioma)) { 
     if ("castella".equals(idioma)) { 
      idioma = "es_ES"; 
     } else if ("catala".equals(idioma)) { 
      idioma = "ca_ES"; 
     } 
     Locale locale = new Locale(idioma); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, null); 
    } 
} 

final en cada actividad Tengo como 20 de ellos que llamo este método antes:

setContentView(R.layout.list_event);

Con estos métodos cuando giro la pantalla las actividades no cambian el idioma aquí hay un enlace a un blog que me ayudó: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

1

Creo que debe establecer la configuración regional en el método MainActivity onCreate. De la misma manera que lo está configurando cuando se usa el método onSharedPreferenceChanged.

+1

He hecho lo que me dijo, pero esto cambia la configuración regional solo en la actividad principal. Simplemente agregaré el mismo código al comienzo de todas mis actividades. gracias – vallllll

+0

Tengo que admitir que nunca intenté lo local. Parece que está basado en una configuración de usuario. ¿Has mirado esto? http://developer.android.com/resources/tutorials/localization/index.html – bytebender

+0

sí, ya he configurado un idioma predeterminado y 2 idiomas: español y catalán, y necesito que el usuario pueda elegir él mismo el lugar. Determinar la configuración regional solo con el teléfono no es suficiente. – vallllll

Cuestiones relacionadas