Autore Topic: Cambiare lingua tramite radio button  (Letto 1588 volte)

Offline stefano861

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Cambiare lingua tramite radio button
« il: 06 Gennaio 2014, 18:08:32 CET »
0
Ciao a tutti, vorrei che fosse permesso all'utente di cambiare lingua dell'app.
Ho quindi creato un options menu, con varie voci tra cui "language". Quando si sceglie questa voce compare una finestra di dialogo con 2 radio button (inglese e italiano) e, teoricamente, in base alla scelta fatta, la lingua dovrebbe cambiare (indipendentemente dalla lingua del dispositivo). Il mio problema è che la lingua non cambia.

Codice (Java): [Seleziona]
        public boolean onOptionsItemSelected(MenuItem item) {
                switch(item.getItemId()) {
                        case R.id.language:
                                onCreateDialogLanguage(LANGUAGE_DIALOG_ID);                    
                        break; 
                        case R.id.about:
                                onCreateDialogAbout(ABOUT_DIALOG_ID);
                                break;
                        case R.id.exit:
                                this.finish();
                                break;
                }      
                return true;
        }

Codice (Java): [Seleziona]
        protected Dialog onCreateDialogLanguage(int id) {
            AlertDialog languageDialog;
            switch(id) {       
                    case LANGUAGE_DIALOG_ID:
                        final CharSequence[] items = {"English", "Italian"};
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        builder.setTitle("Select language");
                        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int item) {
                            switch(item) {
                                case 0:
                                //english
                                        Configuration en = new Configuration(getResources().getConfiguration());
                                        en.locale = Locale.ENGLISH;
                                        getResources().updateConfiguration(en, getResources().getDisplayMetrics());
                                break;
                                case 1:
                                //italian
                                        Configuration it = new Configuration(getResources().getConfiguration());
                                        it.locale = Locale.ITALIAN;
                                        getResources().updateConfiguration(it, getResources().getDisplayMetrics());
                                break;
                            }                          
                            }
                        });
                        languageDialog = builder.create();
                        languageDialog.show();
                        break;     
                    default:
                        languageDialog = null;
            }
            return languageDialog;
        }

Il problema è che, appunto, la lingua non cambia..
Ho creato anche due files strings.xml (una per l'italiano e una per l'inglese). Non c'è un modo "semplice" per associare questo file alla scelta della lingua?

Chiedo scusa se ho fatto errori giganteschi o se non mi sono spiegato bene, questa è la mia prima app.

Grazie :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Cambiare lingua tramite radio button
« Risposta #1 il: 06 Gennaio 2014, 18:13:58 CET »
0
Il tuo è un problema su cui si dibatte da diverso tempo. Che io sappia non esiste un metodo "facile" per cambiare al volo la lingua dell'app. Cambia con la lingua impostata nel terminale, per cui probabilmente l'unico modo è gestirsi "a mano" tutta la localizzazione.

Se poi riesci a trovare il modo e riporti qua la soluzione, credo che ti saranno grati in molti. :-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline stefano861

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Cambiare lingua tramite radio button
« Risposta #2 il: 06 Gennaio 2014, 18:34:03 CET »
0
Il tuo è un problema su cui si dibatte da diverso tempo. Che io sappia non esiste un metodo "facile" per cambiare al volo la lingua dell'app. Cambia con la lingua impostata nel terminale, per cui probabilmente l'unico modo è gestirsi "a mano" tutta la localizzazione.

Se poi riesci a trovare il modo e riporti qua la soluzione, credo che ti saranno grati in molti. :-)
E io che pensavo fosse una cosa semplice.. Cosa intendi con gestirsi "a mano" tutta la localizzazione:-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Cambiare lingua tramite radio button
« Risposta #3 il: 06 Gennaio 2014, 18:49:41 CET »
0
E io che pensavo fosse una cosa semplice.. Cosa intendi con gestirsi "a mano" tutta la localizzazione:-)

Che non sia semplice te lo dimostra il fatto che praticamente nessuna app ha nelle sue preferences la possibilità di scegliere la lingua.

La localizzazione è in gran parte automatica, nel senso che ti basta creare le risorse (testi, immagini, altro) nelle cartelle opportune (values-it per l'italiano, etc) e poi pensa il framework a prendere le risorse della lingua opportuna a seconda delle impostazioni del telefono. A mano intendevo nel senso che rinunci a questi automatismi e cambi i testi a run-time a seconda della lingua che vuoi mostrare. Ma non so quanto ti sia veramente necessaria questa feature.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline stefano861

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Cambiare lingua tramite radio button
« Risposta #4 il: 06 Gennaio 2014, 19:00:31 CET »
0
Va bene, grazie. Allora ci rinuncio e lascio solo la localizzazione automatica  :-)

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Cambiare lingua tramite radio button
« Risposta #5 il: 06 Gennaio 2014, 23:38:13 CET »
0
Come ti è già stato detto , è qualcosa che non viene fatto perchè è lo stesso framework a gestire la lingua. E infatti mi chiedo perchè farlo...
Una app che lo fa è questa: https://play.google.com/store/apps/details?id=de.is24.android

A braccio (senza provarlo e senza sapere se effettivamente funziona) secondo me usa un codice simile al tuo, con la differenza che secondo me va messo nel onCreate dell'Activity prima del setContentView(R.layout.myLayout);

Codice (Java): [Seleziona]
    Resources res = context.getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    android.content.res.Configuration conf = res.getConfiguration();
    conf.locale = new Locale(language_code.toLowerCase());  //prendi il valore dalle sharedPreferences
    res.updateConfiguration(conf, dm);

Nel tuo caso la scelta della lingua dovrebbe salvare il dato sulle SharedPreferences per esempio, e rilanciare la stessa Activity.

Nota a parte:
   
Codice (Java): [Seleziona]
case R.id.exit:
                  this.finish();
                  break;

Android NON ha bisogno del tasto ESCI (uno dei peggiori antipattern...)
E non ha bisogno di lanciare il finish().

iClaude

  • Visitatore
Re:Cambiare lingua tramite radio button
« Risposta #6 il: 07 Gennaio 2014, 12:19:01 CET »
0
Hai già provato questo codice (risp. 6)?

android - How can I change language of my application - Stack Overflow

In alternativa si potrebbe richiamare il menu delle impostazioni x cambiare la lingua...

Offline mirkus87

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Mirko Vitiello
  • Sistema operativo:
    Windows 7
Re:Cambiare lingua tramite radio button
« Risposta #7 il: 07 Gennaio 2014, 12:47:49 CET »
0
Ho avuto anche io tale esigenza la scorsa settimana aprendo il seguente topic Forzare lettura lingua - Android Developers Italia

Dalla mia esperienza ho potuto constatare che le cose da fare sono :
- Nel manifest per ogni activity aggiungere l'attributo android:configChanges="locale"
- Nella prima activity prima dell'onCreate e della setContentView settare la lingua corretta (non ricordo il codice, ma quello postato da GabMarioPower dovrebbe esser corretto)
- Gestire il cambio di lingua dall'activity che presenta la scelta delle lingue
  Ad esempio in un'app struttura nel seguente modo activity A -> activity B (dove posso cambiare lingua)
  dall'activity B una volta cambiata la lingua, richiamo metodo finish(), e richiamo nuovamente l'activity B.
  Una volta che il controllo torna all'activity A, se la lingua è stata cambiata, effettuo la stessa cosa, finish(), e richiamo activity A
  So che è una procedura un po' contorta, pero' onResume() non mi fa ricreare il layout con le lingue aggiornate (magari qualcuno sa come si fa), pero' per adesso io ho risolto cosi'

Offline stefano861

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Cambiare lingua tramite radio button
« Risposta #8 il: 10 Gennaio 2014, 15:09:58 CET »
0
Grazie a tutti, allora mi leggo con calma i link e il codice postato e poi provo. Grazie :)