2010-09-30 6 views
5

Ho un'impostazione nella mia app che consente all'utente di selezionare diversa localizzazione (lingua), ovvero Chinese, German, etc.android: riflette la modifica della lingua dell'interfaccia utente al volo senza ricaricare/riavviare l'app

Quello che vorrei fare è che una volta che l'utente ha scelto, aggiornare immediatamente il layout con stringhe nella lingua attualmente selezionata. Certo, voglio che il cambiamento di lingua venga propagato a TUTTE le attività correnti, senza ricaricare l'app.

Ho trovato questo (non ho ancora provato), ma mi chiedevo se c'è un modo più pulito di farlo.

http://www.tutorialforandroid.com/2009/01/force-localize-application-on-android.html

Gracias

+0

Ciao, hai trovato le migliori pratiche per questo? grazie –

risposta

2

Ho anche avuto questo issue.I utilizzato il codice qui sotto e poi ha cambiato il linguaggio senza aggiornare l'attività

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); 
    onConfigurationChanged(conf); 
    /*Intent refresh = new Intent(this, AndroidLocalize.class); 
    startActivity(refresh);*/ 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // refresh your views here 
    lblLang.setText(R.string.langselection); 
    super.onConfigurationChanged(newConfig); 
} 

Spero che vi aiutano .. .....

+1

Copiato dalla risposta più votata sul seguente link. Anche il codice commentato. http://stackoverflow.com/questions/12908289/how-change-language-of-app-on-user-select-language –

0

Ci sono alcuni passaggi da implementare

In primo luogo, è necessario modificare le impostazioni internazionali della configurazione

Resources resources = context.getResources(); 

    Configuration configuration = resources.getConfiguration(); 
    configuration.locale = new Locale(language); 

    resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 

In secondo luogo, se si desidera che le modifiche si applicano direttamente al layout che è visibile, è sia possibile aggiornare i punti di vista, direttamente o si può chiamare l'attività .recreate() per riavviare l'attività corrente.

Inoltre, è necessario mantenere le modifiche perché dopo aver chiuso l'applicazione si perde la modifica della lingua.

ho spiegato soluzione più dettagliate nel mio blog Change Language Programmatically in Android

In pratica, basta chiamare LocaleHelper.onCreate() sulla classe di applicazione e se si desidera modificare locale al volo si può chiamare LocaleHelper.setLocale()

Problemi correlati