Android - Localization

Dadane02 Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   -  
BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je suis nouveau en développement Android (Encore à ma première application), et je dois proposer une traduction de mon application de Français à Anglais et inversement...

J'ai lu sur internet pas mal de docs, et j'ai lu qu'il fallait changer le fichier strings.xml dans le dossier values.

Dans mon arborescence, j'ai réussi à avoir un fichier string.xml avec le drapeau français et un avec le drapeau anglais.

Mais après niveau code, je ne sais pas comment cela fonctionne :S

Peut-on changer le fichier string.xml en fonction d'un radio bouton par exemple ?

Merci d'avance

Le train-train quotidien va bientôt dérailler , qui veut rester dedans ....
N'a qu'à bien s'accrocher.
A voir également:

5 réponses

BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
Hello,

Le fait d'avoir traduit le fichiers strings.xml en plusieurs permet automatiquement au système d'aller chercher la bonne langue suivant la configuration du système. Si tu veux "forcer la langue", c'est-à-dire si tu veux que l'utilisateur puisse avoir un affichage Français même avec un téléphone en Chinois, c'est différent. Je n'ai jamais codé un tel comportement mais tu dois avoir moyen de forcer la locale.

Regardes ici: https://stackoverflow.com/questions/2900023/change-app-language-programmatically-in-android
0
Dadane02 Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   103
 
Bah j'aimerai proposer à mon utilisateur par exemple 2 boutons, l'un pouvant passer l'application en Français, et l'autre en Anglais...

Je vais regarder ton lien !

Merci de ta réponse déjà !
0
Dadane02 Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   103
 
Je viens de vérifier le lien, et j'ai déjà avancé!
J'ai réussi au chargement, à passer d'anglais à français...
Déjà un grand pas, je vais mettre le sujet sur résolu, je pense pouvoir terminer seul.

Merci de ton lien ;-) !
0
Dadane02 Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   103
 
Hum, petite question...
J'utilise ce code

private void Traduction() {
String languageToLoad = "fr";
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.activity_main);
}


Avec un Listener sur mon bouton :


french.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Traduction();
}
});


ça fonctionne pour passer d'Anglais (langage de base) à Français, mais l'inverse ne fonctionne pas.

Je précise que j'ai codé une fonction TraductionEng avec le même code sauf que comme identifiant je mets "en" au lieu de "fr"

Sais-tu pourquoi ?

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15952 Date d'inscription   Statut Modérateur Dernière intervention   3 918
 
Il vaut mieux utiliser les constantes de Locale plutôt que de mettre une string
Je viens de tester le code suivant, sans souci:

public class MainActivity extends Activity {

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

        findViewById(R.id.buttonEn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changeLanguage(Locale.ENGLISH);
            }
        });

        findViewById(R.id.buttonFr).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changeLanguage(Locale.FRANCE);
            }
        });
    }

    private void changeLanguage(Locale locale) {
        // change locale
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
        
        // restart activity
        Intent intent = new Intent(MainActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

0