2012-09-01 2 views

Respuesta

31

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

+0

¿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 –

+0

@KarueBensonKarue, cambiará solo en la aplicación. –

+0

Bien, gracias por su respuesta –

5

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.

+1

Si todo el desarrollador utiliza de esta forma las aplicaciones, creo que no está muy claro. –

+1

No puedo hablar por otros desarrolladores, ya que no tengo acceso a su codem –

+1

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! :) –

2

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(); 
+1

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

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

Cuestiones relacionadas