Autore Topic: Applicazioni multilingua con strings.xml  (Letto 4093 volte)

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Applicazioni multilingua con strings.xml
« il: 22 Febbraio 2012, 13:07:13 CET »
0
Domandina facile facile: ho creato vari strings.xml di diverse lingue per la mia app dentro res/values-it, res/values-uk, ecc., ora come faccio a dirgli "prendi questo strings.xml in questa cartella"?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Applicazioni multilingua con strings.xml
« Risposta #1 il: 22 Febbraio 2012, 13:17:23 CET »
0
Lo fa in automatico, puoi cambiare la lingua del device e vedrai che ti cambiano le scritte.

Sempre che la domanda fosse questa :P

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #2 il: 22 Febbraio 2012, 13:25:10 CET »
0
Lo fa in automatico, puoi cambiare la lingua del device e vedrai che ti cambiano le scritte.

Sempre che la domanda fosse questa :P

mmm...no :D la mia domanda era diversa...dentro i vari strings.xml ho le traduzioni dei pulsanti, delle textview, ecc., e quando scelgo che la mia app giri in inglese deve caricare la strings.xml di values-uk, per l'italiano quella di values-it, ecc...

come si fa?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Applicazioni multilingua con strings.xml
« Risposta #3 il: 22 Febbraio 2012, 16:43:30 CET »
0
mmm...no :D la mia domanda era diversa...dentro i vari strings.xml ho le traduzioni dei pulsanti, delle textview, ecc., e quando scelgo che la mia app giri in inglese deve caricare la strings.xml di values-uk, per l'italiano quella di values-it, ecc...

come si fa?
Lo fa in automatico come ti é già stato detto.
Per provare le traduzioni basta cambiare la lingua di sistema e vedrai che la tua app si adatterà a seconda delle traduzioni che hai reso disponibili.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #4 il: 22 Febbraio 2012, 16:58:48 CET »
0
Lo fa in automatico come ti é già stato detto.
Per provare le traduzioni basta cambiare la lingua di sistema e vedrai che la tua app si adatterà a seconda delle traduzioni che hai reso disponibili.

mmm...credo di essermi spiegato male io allora... :-[

in pratica nella mia app sono presenti pulsanti, textview e solite cose, l'utente può scegliere dal menù dell'app se averla in italiano, in inglese, in tedesco, ecc, semplicemente scegliendo la lingua. Non la lingua del device, ma la lingua dell'app.

Io ho pensato di fare vari file strings.xml e poi in base a quello che sceglie l'utente ne carica uno rispetto a un altro, ma forse non si fa così...

Suggerimenti?  :-)

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:Applicazioni multilingua con strings.xml
« Risposta #5 il: 22 Febbraio 2012, 17:34:48 CET »
+2
Tu vorresti cambiare la lingua programmaticamente, se non ho capito male.

Su stackoverflow ho trovato questo snippet da mettere in onResume(), sarebbe da provare (magari non in "ru"):

Codice (Java): [Seleziona]
Locale locale = new Locale("ru");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Applicazioni multilingua con strings.xml
« Risposta #6 il: 22 Febbraio 2012, 17:50:37 CET »
0
mmm...credo di essermi spiegato male io allora... :-[

in pratica nella mia app sono presenti pulsanti, textview e solite cose, l'utente può scegliere dal menù dell'app se averla in italiano, in inglese, in tedesco, ecc, semplicemente scegliendo la lingua. Non la lingua del device, ma la lingua dell'app.

Io ho pensato di fare vari file strings.xml e poi in base a quello che sceglie l'utente ne carica uno rispetto a un altro, ma forse non si fa così...

Suggerimenti?  :-)
Capisco.. Prova quello che ti ha postato bradipao se la tua intenzione é far cambiare all'utente la lingua dell'app.
Ma se vuoi semplicemente un'app che si mostri nella lingua dell'utente, tutto ciò non serve.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #7 il: 22 Febbraio 2012, 18:28:13 CET »
0
Dunque...Il metodo dell'onResume funziona, cioè se metto quel codice dentro onResume con "it" al posto di "ru" vedo tutto in italiano, però come faccio a dirgli di usare un altro strings.xml quando premo un button?

Nel mio caso ho:

Codice (Java): [Seleziona]
    public void lingua(String lng)
    {
        Locale locale = new Locale(lng);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
    }

dove lng può essere "it", "en", "es", ecc., e quando premo un pulsante fa partire lingua(lng) con lng col valore che gli do io sul momento, però non cambia in diretta la lingua ma resta sempre la stessa. Devo aggiornare l'activity o qualcosa del genere?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Applicazioni multilingua con strings.xml
« Risposta #8 il: 24 Febbraio 2012, 10:36:00 CET »
0
Io opterei per memorizzare la lingua nelle sharedpreferemce o direttamente nelle preference.

Ora nelle preference viene tutto memorizzato in automatico realizzando una pagina di preference.
Con le shared invece dovresti fare il button, il button avrà un setonclicklistener, al suo interno memorizzi il nuovo locale nelle sharedpreference e fai un restartactivity.

Nel resume imposti il Locale in base alle sharedpreference.

Magari dimmi tu se preferisci fare una pagina di settings (quindi preference) oppure gestire il tutto con un bottone (quindi sharedpreference) e poio vediamo

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Applicazioni multilingua con strings.xml
« Risposta #9 il: 24 Febbraio 2012, 10:38:23 CET »
0
Nel tuo caso non va appunto perchè devi rilanciare l'activity per fargli cambiare lingua, riavviando l'activity però perdi il valore della variabile con la lingua.

Per questo devi usare le preference o le sharedpreference.

A quel punto la lingua viene salvata in un file e viene mantenuto il valore SEMPRE, quindi ad ogni avvio la lingua resta corretta.

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #10 il: 24 Febbraio 2012, 11:41:53 CET »
0
Sì avevo pensato anch'io a memorizzarlo nelle preference, ma non sapevo che per vedere i cambiamenti della lingua era necessario riavviare. In effetti potrei farlo partire con una lingua predefinita, poi l'utente sceglie la sua lingua, salvo il valore nelle preference e dico di riavviare o riavvio direttamente l'app, e al riavvio la carica dalle preference. Va bene, penso che farò così.  ;-)

Ma posso dirgli all'app di riavviarsi o è meglio farlo fare all'utente?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Applicazioni multilingua con strings.xml
« Risposta #11 il: 24 Febbraio 2012, 12:02:13 CET »
+1
Quando cambia la lingua cambi il locale e chiami il metodo restartActivity();

Codice (Java): [Seleziona]
public void restartActivity(){
Intent intent = getIntent();
finish();
startActivity(intent);
}

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:Applicazioni multilingua con strings.xml
« Risposta #12 il: 24 Febbraio 2012, 12:03:11 CET »
0
Ricorda che all'avvio l'app deve settare la lingua in base alle preference!!! :D

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #13 il: 26 Febbraio 2012, 01:32:26 CET »
0
Perfetto!! Tutto risolto!!  :D

All'avvio leggo le preferenze e setto la lingua con "Locale", poi se vuole l'utente può cambiarla e allora riscrivo le preferenze e riavvio l'activity con restartActivity ed è fatta!!

Ora il problema è un'altro ma minore e ho aperto un altro thread per non andare OT.

Offline BeaN

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-I5500 Corby
  • Sistema operativo:
    Windows XP SP2
Re:Applicazioni multilingua con strings.xml
« Risposta #14 il: 26 Febbraio 2012, 01:55:58 CET »
0
Però....ho appena apportato una modifica e mi sa che c'è qualche problemino. In pratica ho implementato dentro onDestroy:
Codice (Java): [Seleziona]
        @Override
        public void onDestroy()
        {
                super.onDestroy();
                android.os.Process.killProcess(android.os.Process.myPid());
        }
e quando esco dall'app volutamente va tutto ok, non compare tra i processi in esecuzione, ma se invece faccio il restartActivity, l'app si chiude e stop, senza riavviarsi più, e mi sembra anche una cosa logica perchè va chiaramente a beccare onDestroy durante la chiusura prima del riavvio, ma in quel caso non riparte più.

Il fatto è che a me serve poter killare l'app senza farla rimanere in memoria, ma come posso fare senza dover per forza aggiungere nel menu.xml il pulsante "Uscita" che andrebbe semplicemente a richiamarsi android.os.Process.killProcess(android.os.Process.myPid());?