2011-06-04 18 views
10

En mi aplicación tengo una opción de selección de idioma.¿Cómo puedo cambiar el idioma de mi aplicación?

Hay tres idiomas: inglés, alemán & español. Cuando selecciono una opción, se debe cambiar todo el idioma de la aplicación.

¿Cómo puedo hacer esto posible?

+2

favor mirar la ventana de vista previa cuando se prepara una pregunta, y no utilizar etiquetas HTML directamente, utilice los controles del editor. El texto de su pregunta no se mostró en absoluto. – Mat

+3

Gracias por ayudar al chico nuevo, @Mat. – DOK

Respuesta

21

¿Quiere decir que quiere usar otro idioma además del idioma predeterminado en el teléfono? Lo tengo en una aplicación, y esto es lo que tenía que hacer.

Agregue esto a su declaración de actividad en el AndroidManifest.xml

<activity 
    android:name=".ui.SomeActivity" 
    android:configChanges="locale" 
    : 
    : 
</activity> 

Y luego invocar un método como este de onCreate en su actividad:

public static void setLanguage(Context context, String languageToLoad) { 
    Log.d(TAG, "setting language"); 
    Locale locale = new Locale(languageToLoad); //e.g "sv" 
    Locale systemLocale = SystemLocale.getInstance().getCurrentLocale(context); 
    if (systemLocale != null && systemLocale.equals(locale)) { 
     Log.d(TAG, "Already correct language set"); 
     return; 
    } 
    Locale.setDefault(locale); 
    android.content.res.Configuration config = new android.content.res.Configuration(); 
    config.locale = locale; 
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    Log.d(TAG, "Language set"); 
} 
+0

Entonces, después de hacer las dos cosas anteriores, solo necesito crear el archivo de resoures (R.String.Values.xml para soporte de lenguaje específico) y bases en la configuración de la aplicación. Puedo configurar el idioma del tiempo de ejecución de la aplicación. Correcto ? –

+2

¿De dónde sacaste SystemLocale y TAG? – Teysz

+1

Creo que se debe usar 'Locale.getDefault()' en lugar de 'SystemLocale ....' –

0

Usted sólo tiene que añadir la carpeta de valor de acuerdo con el idioma . Por ejemplo, he agregado 3 idiomas: inglés, árabe e hindi. En res carpeta crear values-ar para árabe y values-hi para hindi para contener todas las cadenas utilizadas en la aplicación. Ahora tengo una lista de idiomas. Entonces, cuando el usuario hace clic en uno de los idiomas, el idioma de la aplicación cambiará y el idioma del teléfono seguirá siendo el mismo. Este es el código ..

listview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // When clicked, show a toast with the TextView text 
      String language = ((TextView) view).getText().toString(); 
      if (language.equals("English")) { 
       Locale locale = new Locale("en"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in English", 
         Toast.LENGTH_LONG).show(); 

      } else if (language.equals("Arabic")) { 

       Locale locale = new Locale("ar"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in Arabic", 
         Toast.LENGTH_LONG).show(); 
      }else if (language.equals("Hindi")) { 

       Locale locale = new Locale("hi"); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getBaseContext().getResources() 
         .updateConfiguration(
           config, 
           getBaseContext().getResources() 
             .getDisplayMetrics()); 
       Toast.makeText(ChangeLanguage.this, "Locale in Hindi", 
         Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(ChangeLanguage.this, 
         "Locale in not changed!", Toast.LENGTH_LONG).show(); 
      } 
      /* 
      * Toast.makeText(getApplicationContext(), language, 
      * Toast.LENGTH_SHORT) .show(); 
      */ 

      GetterSetter.getInstance().setLanguage(changelanguage); 
      startActivity(new Intent(ChangeLanguage.this, 
        MainSettings.class)); 
      main.tabhost.setCurrentTab(3); 
     } 
    }); 
+0

Debería SECAR definitivamente su código. – JJD

Cuestiones relacionadas