Exercice : Traduction des chaînes de texte
Contexte
Lorsque l'on crée un produit destiné à l'international et affichant du texte, il convient de :
soit laisser à l'usager le choix de la langue dans l'application elle-même (à condition que celle-ci dispose d'un interface de dialogue avec l'usager),
soit de proposer une version du produit dans sa langue.
Dans notre projet, les textes envoyés sur l'écran (ou sur la liaison série) sont actuellement en français et écrits « en dur » dans le code : cela signifie qu'une traduction du projet dans une autre langue nécessiterait d'aller explorer l'ensemble du code pour y trouver, et y remplacer, les chaînes de texte, ce qui est assez laborieux puisque cela conduirait à une version du projet par langue !
Il existe plusieurs méthodes pour éviter cela, selon que l'on souhaite livrer un produit déjà traduit dans la langue de l'usager ou que l'on souhaite que l'usager choisisse lui-même la langue :
dans le cas où l'usager choisit la langue, il faut donc embarquer dans le code toutes les traductions disponibles. Si, dans une application classique, tel un logiciel installable sur un ordinateur ou un site web, cela est tout à fait possible (et c'est d'ailleurs ce qui se pratique la plupart du temps), dans le cas d'un microcontrôleur où l'espace de stockage est très limité, c'est plus difficilement envisageable,
dans le cas où la langue du produit est choisie par le concepteur, il faut tout de même trouver une méthode pour faciliter son travail. L'idée maîtresse est d'avoir, dans un fichier unique, la liste des chaînes de textes correspondant à une langue donnée et donc d'avoir un fichier de ce type par langue. On peut ensuite utiliser par exemple une constante, qui va désigner chaque chaîne.
Complément sur la directive #if
La directive #if
permet de tester une condition et de compiler ce qui suit si cette condition est vraie. La syntaxe d'une condition est la même que celle d'un if
classique comme le montre l'exemple ci-dessous :
/*Cette partie ne sera compilée que si la condition est vraie
c'est-à-dire la constante DEBUG égale à 2
*/
//Sinon, c'est cette partie qui sera compilée
Cela va nous être utile pour ne compiler que la langue qui nous intéresse.
Question
Proposez une solution qui permette d'obtenir au choix, des chaînes de texte en français ou en anglais. Le choix de la langue s'effectuera grâce à une constante LANGAGE qui sera égale à 0 pour le français et à 1 pour l'anglais. Il est conseillé d'utiliser des fichiers de traduction distincts, par exemple traductions_fr.h
et traductions_en.h
. Nous nous limiterons aux chaînes de textes de l'écran LCD.
Solution
Solution pour kit Arduino
Ce fichier .zip contient le projet complet pour kit Arduino.
Attention : Solution sur simulateur
Il s'agit d'une solution proposée sur le simulateur Wokwi. L'implantation sur un kit peut nécessiter des ajustements dans le sens où les composants réels ne sont pas obligatoirement les mêmes que ceux de la simulation. Dans le cas présent, les bibliothèques utilisées pour la mise en oeuvre d'un afficheur LCD diffèrent entre l'implantation sur kit et celle sur simulateur.
Travail à rendre
Vous exporterez le croquis (Outils
→ Archiver le croquis
) puis le déposerez sur la plate-forme pédagogique selon les instructions qui vous seront indiquées.


Tout programme non commenté ne sera pas corrigé.