Autore Topic: App multilingua  (Letto 1045 volte)

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
App multilingua
« il: 25 Febbraio 2016, 14:13:05 CET »
0
Salve a tutti

Volevo creare una semplice app per android in cui si poteva cambiare la lingua semplicemente cliccando su dei bottoni ma cercando su internet
non ho trovato molto che mi potesse aiutare a farlo come volevo io.

Avevo trovato questa guida [Android dev] Change the language into your app | Hello.  che spiegava un pò come fare ma nonostante questo non mi cambia la lingua cliccando nei vari Button

Il codice è questo


Il main activity
Codice (Java): [Seleziona]
package com.example.marco.multilingua;

import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button_it, button_fr, button_en;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button_en = (Button) findViewById(R.id.btn_en);

        button_it = (Button) findViewById(R.id.btn_it);

        button_fr = (Button) findViewById(R.id.btn_fr);


     button_it.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {

             LanguageHelper.changeLocale(getResources(),"it");

         }
     });

        button_en.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                LanguageHelper.changeLocale(getResources(),"");

            }
        });
        button_fr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                LanguageHelper.changeLocale(getResources(),"fr");

            }
        });




    }


}

E' questa è la classe LanguageHelper che in teoria dovrebbe cambiarmi la lingua all'applicazione
Codice (Java): [Seleziona]
package com.example.marco.multilingua;

import android.content.res.Configuration;
import android.content.res.Resources;

import java.util.Locale;

/**
 * Created by Marco on 25/02/2016.
 */

public class LanguageHelper {

    public static void changeLocale(Resources res, String locale) {
        Configuration config;
        config = new Configuration(res.getConfiguration());

        switch(locale){
            case "it":
                config.locale = new Locale("it");
                break;
            case "fr":
                config.locale = Locale.FRENCH;
                break;
            default:
                config.locale = Locale.ENGLISH;
                break;
        }

        res.updateConfiguration(config, res.getDisplayMetrics());
        //reload file from assets directory
    }
}

Spero che qualcuno possa aiutarmi a risolvere questo problema.
Grazie!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:App multilingua
« Risposta #1 il: 25 Febbraio 2016, 18:33:44 CET »
0
Sinceramente non ho tempo di leggere.
Io per le lingue non faccio altro che inserire tutte le possibili lingue nel file strings.xml. Ovviamente hai un xml per ogni lingua in androidstudio. Una volta che l' utente dal MENU DI ANDROID cambia lingua, la tua applicazione riflette l'impostazione settata

Offline dev91

  • Utente junior
  • **
  • Post: 51
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Note 4
Re:App multilingua
« Risposta #2 il: 25 Febbraio 2016, 19:16:06 CET »
0
Sinceramente non ho tempo di leggere.
Io per le lingue non faccio altro che inserire tutte le possibili lingue nel file strings.xml. Ovviamente hai un xml per ogni lingua in androidstudio. Una volta che l' utente dal MENU DI ANDROID cambia lingua, la tua applicazione riflette l'impostazione settata

Io credo che la sua domanda sia diversa, in quanto non vuole che la lingua cambi al cambiare della lingua di Android, ma selezionandola all'interno della sua app.

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #3 il: 25 Febbraio 2016, 19:41:15 CET »
0
Ciao,
io nella mia app faccio n questo modo:

Codice (Java): [Seleziona]
public void fillLanguage(String lang) {
        Locale myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
    }

questa la richiamo passandogli per esempio:
Codice (Java): [Seleziona]
fillLanguage("en");
però poi devi rilanciare l'app. Ma puoi farlo in automatico

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:App multilingua
« Risposta #4 il: 25 Febbraio 2016, 21:43:51 CET »
0



Sinceramente non ho tempo di leggere.
Io per le lingue non faccio altro che inserire tutte le possibili lingue nel file strings.xml. Ovviamente hai un xml per ogni lingua in androidstudio. Una volta che l' utente dal MENU DI ANDROID cambia lingua, la tua applicazione riflette l'impostazione settata

Non è proprio quello che intendevo ma grazie lo stesso perchè con il tuo consiglio ho imparato una cosa nuova

Io credo che la sua domanda sia diversa, in quanto non vuole che la lingua cambi al cambiare della lingua di Android, ma selezionandola all'interno della sua app.

Si esatto è proprio quello che intendevo

Ciao,
io nella mia app faccio n questo modo:

Codice (Java): [Seleziona]
public void fillLanguage(String lang) {
        Locale myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
    }

questa la richiamo passandogli per esempio:
Codice (Java): [Seleziona]
fillLanguage("en");
però poi devi rilanciare l'app. Ma puoi farlo in automatico

Grazie NetGEL appena posso provo subito usando il tuo consiglio


Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #5 il: 25 Febbraio 2016, 22:13:17 CET »
0
Ok. Fammi sapere  :-)

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:App multilingua
« Risposta #6 il: 25 Febbraio 2016, 23:19:54 CET »
0
Ho implementato il codice che hai postato ma mi segna in rosso questa riga di codice  :-(
Codice (Java): [Seleziona]
Resources res = getResources();per esattezza solo la parte getResources()

puntando sopra il mouse mi dice questo "cannot resolve method 'getResources()'"

Ancora non sono molto pratico di programmazione su android è sicuro mi sfugge qualcosa
Tu sapresti indicarmi cosa secondo te manca ?

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #7 il: 25 Febbraio 2016, 23:25:16 CET »
0
Dove richiami questo codice?
Guarda se puoi richiamare il context e fare una cosa del tipo context.getResources()
« Ultima modifica: 25 Febbraio 2016, 23:42:34 CET da NetGEL »

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:App multilingua
« Risposta #8 il: 26 Febbraio 2016, 00:32:13 CET »
0
Sinceramente non ho tempo di leggere.
Io per le lingue non faccio altro che inserire tutte le possibili lingue nel file strings.xml. Ovviamente hai un xml per ogni lingua in androidstudio. Una volta che l' utente dal MENU DI ANDROID cambia lingua, la tua applicazione riflette l'impostazione settata
Io credo che la sua domanda sia diversa, in quanto non vuole che la lingua cambi al cambiare della lingua di Android, ma selezionandola all'interno della sua app.

Per quanto la domanda sia diversa, è proprio quello il modo di procedere.
Andare a gestire il cambio lingua attraverso un tasto è una delle cose che quasi mai si fanno in un'applicazione android (basta guardare le app più utilizzate per rendersene conto).
La cosa essenziale è gestire il multilingua nella propria app attraverso i file strings.xml.
Il resto lo fa il sistema operativo.

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #9 il: 26 Febbraio 2016, 00:37:57 CET »
0
Si il multilingua si gestisce con gli strings.xml ma un utente potrebbe avere Android in Italiano e voler vedere l'app in Inglese per esempio. Perché no...

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:App multilingua
« Risposta #10 il: 26 Febbraio 2016, 00:55:50 CET »
0
Si il multilingua si gestisce con gli strings.xml ma un utente potrebbe avere Android in Italiano e voler vedere l'app in Inglese per esempio. Perché no...

In quante applicazioni hai visto una funzionalità del genere?

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #11 il: 26 Febbraio 2016, 01:01:13 CET »
0
In alcune applicazioni l'ho visto infatti mi è piaciuta e ho implementato questa funzionalità anche nella mia. Poi concordo che Android gestisce automaticamente il cambio lingua però aver la possibilità di scegliere la lingua indipendentemente dalla lingua di Android personalmente non mi dispiace. Poi è soggettivo  :-)

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:App multilingua
« Risposta #12 il: 26 Febbraio 2016, 23:20:20 CET »
0
Buona sera scusate il ritardo della mia risposta ma non ho avuto molto tempo libero a disposizione oggi.

Ho creato un nuovo progetto ridotto al minimo essenziale per fare la prova ed il problema che ti avevo detto prima è scomparso  :-) Non mi segna più in rosso niente

Però nonostante questo non ha funzionato  o_O clicco nei bottoni per cambiare lingua ma non succede nulla
di sicuro stò sbagliando qualcosa ma non stò riuscendo a capire dove

Ho semplicemente creato dei nuovi file string.xml con le varie lingue


E successivamente ho scritto questo codice seguendo i consigli dati


Se volete vi posto gli errori che mi dice il logcat se avete voglia di leggerli

Offline NetGEL

  • Utente normale
  • ***
  • Post: 196
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:App multilingua
« Risposta #13 il: 26 Febbraio 2016, 23:21:54 CET »
0
Sì posta pure gli errori.

Post unito: 26 Febbraio 2016, 23:25:24 CET
puoi fare questa prova. Nella oncreate metti fillLanguage("it") e guarda se la tua app parte in italiano e poi fai la stessa prova con fillLanguage("en") e vedi se parte in inglese
« Ultima modifica: 26 Febbraio 2016, 23:25:24 CET da NetGEL, Reason: Merged DoublePost »

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:App multilingua
« Risposta #14 il: 27 Febbraio 2016, 00:16:35 CET »
0
Ecco tutti gli errori da quando faccio partire l'app a quando provo a cliccare sui Button


Ho fatto la prova che mi dici tu ma niente
mi parte sempre e solo in italiano nonostante il file strings.xml normale non lo è

Potrebbe centrare col fatto che il mio cellulare android è impostato come lingua a italiano e quindi parte in italiano di default ?


02-27 00:14:40.278      222-222/? E/﹕ BatteryPropertiesListener: batteryStatus=5, batteryLevel=100, batteryVoltage=4337, batteryTemperature=270
02-27 00:14:40.288      222-222/? E/﹕ BatteryPropertiesListener: batteryStatus=5, batteryLevel=100, batteryVoltage=4337, batteryTemperature=270
02-27 00:14:40.291      222-222/? E/﹕ BatteryPropertiesListener: batteryStatus=5, batteryLevel=100, batteryVoltage=4337, batteryTemperature=270
02-27 00:14:40.299      222-222/? E/﹕ BatteryPropertiesListener: batteryStatus=5, batteryLevel=100, batteryVoltage=4337, batteryTemperature=270
02-27 00:14:41.862  27590-27590/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
02-27 00:14:41.862  27590-27590/? E/android.os.Debug﹕ failed to load memtrack module: -2
02-27 00:14:41.924  27590-27596/? E/jdwp﹕ jdwp::setsockopt(SO_SNDTIMEO)
02-27 00:14:41.924  27590-27596/? E/jdwp﹕ jdwp::setsockopt(SO_RCVTIMEO)
02-27 00:14:41.950     760-1214/? E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!!
02-27 00:14:41.951     760-1214/? E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!!
02-27 00:14:42.582  27601-27601/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
02-27 00:14:42.582  27601-27601/? E/android.os.Debug﹕ failed to load memtrack module: -2
02-27 00:14:42.646  27601-27607/? E/jdwp﹕ jdwp::setsockopt(SO_SNDTIMEO)
02-27 00:14:42.646  27601-27607/? E/jdwp﹕ jdwp::setsockopt(SO_RCVTIMEO)