Skip to content

8 août 2010 | Rédigé par Axon

20

Internationaliser vos applications Android [Tutoriel Android n°14]

Bonjour à tous, aujourd’hui nous allons apprendre à internationaliser nos applications Android, car faire une application Android c’est bien mais faire une application Android internationalisée c’est mieux. Ceci peut être extrêmement pratique pour augmenter le nombre de téléchargement de votre application sur le Market (et oui si on touche un public plus important on a forcement plus de téléchargements ! )

Pour ceux qui en ont un peu marre de coder à tout va, nous allons faire une petite pause aujourd’hui, car nous allons très peu de coder.

Par défaut, les fichiers xml présent dans le dossier values et les images contenu dans le dossier drawable correspondent inévitablement à la langue par défaut c’est à dire l’anglais. Nous allons donc commencer par mettre le drapeau du Royaume-Unis (trouvé ici) dans le dossier drawable et renommez-le flag.png. Ensuite allons dans le fichier string.xml situé dans le dossier res >>> values et nous allons modifier la Value pour chaque éléments de ressources. Donc pour le champs app_name mettez comme valeur : Internationalize an Android application | tutomobile.fr et pour le champs hello mettez comme valeur : Hello, this Android Application is in English!

Code XML

Je vous avais promis qu’il n’y aurai que très peu de code je vais donc tenir ma parole, nous allons simplement rajouter une ImageView dans le fichier main.xml, qui devrait ressembler à ceci :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal|center_vertical"
    >
 
<ImageView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/flag"
    android:paddingBottom="20dp"
    />    
 
<TextView  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

Voilà c’est fini pour le code! ;)

Maintenant si vous lancer votre application vous devriez voir apparaitre ceci :

Bon jusque là rien de bien nouveau, c’est comme un simple Hello World. Maintenant passons à la petite subtilité.

Internationaliser le texte

Parcourez les menus Files >>> New >>> Android XML File et appelez ce nouveau fichier string.xml. Vous allez surement me dire « oui il est bien gentil celui-là mais il existe déjà ce fichier ! » ;) donc oui il existe déjà mais nous allons faire la version française. Pour cela nous allons sélectionner Language dans la colonne Available Qualifiers et cliquer sur la petite flèche vers la droite pour faire passez Language dans la colonne Chosen Qualifier. Ensuite taper les deux lettre « fr » dans la petite boîte de dialogue qui vient d’apparaître à droite de la fenêtre. Votre fenêtre devrait ressembler à ceci :

Ensuite cliquez sur Finish. Nous allons donc éditer le nouveau fichier string.xml situé dans le dossier res >>> values-fr et ajouter les couple Name/Value suivant : « hello/Bonjour, cette application est en français! » et « app_name/Internationaliser une application Android | tutomobile.fr« .

Internationaliser les images

Nous allons passer à l’internationalisation des images. Créez un dossier drawable-fr-rFR dans le dossier res. Puis mettez l’image du drapeau français (trouvé ici) dans ce nouveau dossier drawable-fr-rFR en n’oubliant pas de le renommer flag.png.

Et voilà nous en avons fini avec les manip’ sous Eclipse vous pouvez lancer votre application… Et normalement vous devez toujours avoir votre texte et votre image en anglais :( Ne vous inquiétez pas c’est normal car la langue de l’émulateur est réglé par défaut sur l’anglais. Il suffit dont de modifier la langue du téléphone et allant sur l’application Custom Locale situé dans le volet des applications de l’émulateur. Sélectionnez fr —> French avec un appui long puis cliquez sur Apply. Voilà désormais l’émulateur est en français, relancez votre application et vous devriez voir apparaître ceci :

Donc là nous avons fais un exemple d’application français/anglais mais nous pouvons rajouter toutes les langues que nous voulons comme par exemple l’espagnole :

C’est terminé pour aujourd’hui, j’espère que ce tuto vous a plu (n’oubliez pas de cliquer sur le petit « + » en haut à droite du tuto, merci) et je vous dis à très vite pour un prochain tuto Android. Continuez à nous soutenir via Twitter et FaceBook, cela nous pousse à continuer et merci pour votre soutien.

Découvrez d'autre articles de la catégorie Tutoriels Android

Encore un peu de lecture :

20 Commentaires Poster un commentaire
  1. salimdz
    11 août 2010

    bonjour,
    je te remercie pour ce article il très intéressant,

    il y a aussi cette fonction pour récupère le texte d’un string

    String string = getString(R.string.hello);

  2. 11 août 2010

    Oui cette fonction est utile lorsque l’on souhaite récupérer la valeur d’un TextVIew dans le code JAVA mais là je n’en ai pas besoin… ;)

  3. salimdz
    11 août 2010

    Bonjour,
    j’ai utilise pour la fonction setIndicator de TabHost, et dans les comparaison de chaine
    a+

  4. 12 août 2010

    Great article, thanks for sharing this. I have subscribed to your RSS feed and am looking forward to reading more from you.
    Keep up the good work and don’t stop posting please.

  5. Steph
    10 sept 2010

    Yeah, ca c’est un tuto super utile ! Merci encore bravo

  6. 10 sept 2010

    @Steph : Merci ;)

  7. Nikska
    23 oct 2010

    Très bon tuto simple et utile.
    Bonne continuation !!

  8. cad13
    7 nov 2010

    Salut Axon,
    Peux-tu donner les codes des principaux pays ? (fr=France)
    J’imagine en pour anglais…
    Merci d’avance si tu les as.

  9. 7 nov 2010

    @cad13 : Pas de problème !
    Allemand –> de
    Anglais –> en
    Espagnol –> es
    Français –> fr
    Italien –> it
    Japonnais –> ja
    Coréen –> ko
    Néerlandais –> nl
    Polonais –> pl
    Russe –> ru
    Chinois –>zh

  10. Glaux
    2 jan 2011

    Merci pour cet article qui m’a bien aidé.
    J’ai développé une application hydraulique pour mon besoin personnel (nommée Colebrook). Puis, vu le travail, j’ai décidé de la publier en licence GPL. Elle est en anglais et en français, et fonctionne bien dans les 2 langues (selon le paramétrage de la langue du téléphone). Je pensais que si un espagnol la téléchargeait, il l’aurait en anglais car c’est la langue déclarée par défaut sur le market.
    Mais si je mets mon téléphone en espagnol ou en italien et que j’installe l’application, elle plante au lancement.
    Quelqu’un aurait-il une idée.
    Merci

  11. Glaux
    2 jan 2011

    J’ai trouvé la solution tout seul : les fichiers correspondant à la langue par défaut doivent être directement dans les répertoires natifs (res/values, res/raw..). Dans mon projet, il s’agit des fichier en langue anglaise.
    Les fichiers de traduction, dans mon cas en langue française, doivent être dans les répertoires res/values-fr, res/raw-fr…
    S’il y avait des fichiers espagnols, ils seraient dans res/values-es, res/raw-es…
    Si un polonais télécharge l’application et que sa langue n’est pas prévue dans l’application, le système choisira la langue par défaut, présente dans les répertoires natifs (res/values, res/raw..), c’est à dire l’anglais.
    a+

  12. 11 jan 2011

    Super tuto, bien expliqué. Merci

  13. 26 fév 2011

    Merci pour ce super tuto comme toujours… :)

  14. 26 fév 2011

    Petite précision, pour moi en nommant le dossier « drawable-fr-rFR » cela ne marchait pas mais en le nommant « drawable-fr » bien. Mais je travaille avec android 2.2 c’est peut-être ça ;)

  15. 14 mar 2011

    Ton site commence à devenir de plus en plus indispensable pour moi. Continu comme ça! :)

    J’ai commencé à adapter mon application à plusieurs langues. Mais j’aurais voulu savoir s’il est possible de prévoir le changement de la langue directement dans l’application.

    D’après ce que j’ai compris le choix de la langue ce fait automatiquement en fonction de la langue du téléphone. Mais si un gars anglais décide de passer en français … Est-ce qu’il est obligé de mettre son portable en français ?

    A la base j’avais prévu d’utiliser cette méthode et de mettre un bouton « langue » dans le menu de mon application qui permettait de choisir sa langue. Mais là je vois pas comment concilier les deux.

    Merci d’avance.

    Encore bravo pour tout tes tutos. :)

  16. Glaux
    16 juin 2011

    Je me pose la même question que Vlad depuis pas mal de temps : comment paramétrer le changement de langue dans le programme?
    quelqu’un connait-il la réponse?
    Merci

  17. 29 juin 2011

    Merci pour le site et les tutos.
    J’ai particulièrement adoré le tutos sur sqlite te android. En une nuit, j’ai cerné tout ce qu’il faut faire et très bien. J’ai beaucoup ramé avant de tombé sur ce site et je suis fière de voire que les tutos aident vraiment à avancer. Je ne manquerais pas de partager le site avec mes camarades de la fac.

    J’aimerais avoir un tutos sur l’échange de document avec android et une machine via une url.

    Merci pour ce site vraiment, c’est trop cool

  18. Jérem
    3 déc 2011

    Super tuto et merci beaucoup pour ce que tu fais c’est en grosse partie grâce à toi que appris tout ce que je sais sur comment développer avec Android ;)

    J’aurais tout de même une question, sais-tu comment je pourrais faire pour changer le contenu de mes messages à l’intéreur du code ?
    Par exemple pour un Toast.makeText, comment puis-je faire pour changer le contenu en fonction du pays ?

    merci d’avance !
    Bonne continuation !

  19. alpha
    29 mai 2012

    Si on veux récupérer une texte sur le fichier string des ressource , mais sur une classe qui n’hérite pas d’activité , comment on peut faire ?

  20. 30 mai 2012

    On ne peut pas il faut absolument un context le mieux est donc de passer dans le constructeur de ta classe un argument contenant le context de ton activité

Une question, une suggestion, une opinion? Partagez ce que vous pensez, laissez un commentaire.

(obligatoire)
(obligatoire)

Note: Votre adresse email ne sera jamais publiée.

Suivez les réponses aux commentaires