Dans l'univers GNU/Linux, tous les logiciels – à de très rares exceptions près – existent en anglais. La langue anglaise constitue ainsi le grand dénominateur commun, mais elle est loin d'être maîtrisée par tout le monde. En dehors de cela, chacun d'entre nous préférera probablement utiliser un logiciel dans sa langue maternelle... à condition, bien sûr, que celle-ci soit disponible. Malheureusement, cela n'est pas toujours le cas. Et pourquoi ne pas proposer votre propre traduction ? Soyons formels : pas la peine d'avoir les moindres connaissances en matière de programmation pour traduire votre logiciel préféré. Cet article vous montre pas à pas comment il faut faire, en vous présentant les outils appropriés, et en s'appuyant sur un exemple pratique.
i18n ?
Vous souhaitez donc vous atteler à la traduction d'un logiciel que vous appréciez. Dans ce cas, une visite à la page web du projet s'impose. Les projets d'une certaine envergure proposent en général un lien vers une page qui détaille les différentes traductions entreprises, le degré d'avancement de chaque traduction ainsi que les équipes respectives. Si rien de tel n'existe, effectuez une recherche Google avec le nom du logiciel et les termes "internationalization" ou "i18n".
Si la langue cible ne figure pas parmi la liste de langues proposées, il suffit en règle générale de contacter le développeur du logiciel pour l'informer de votre projet de traduction. Parallèlement, inscrivez-vous aux différentes listes de diffusion dédiées au logiciel, surtout si celles-ci comportent un des suffixes -devel ou -i18n. Ceci vous évitera de réinventer la roue, au cas où quelqu'un travaille déjà sur une traduction dans la langue souhaitée.
Une fois que le développeur et/ou les autres traducteurs ont donné leur feu vert, il ne vous reste plus qu'à vous procurer le code source du logiciel. C'est ce que nous allons faire. En guise d'application pratique, je choisis le logiciel Sweep, un éditeur audio dont la traduction française avoisine zéro en termes de quantité aussi bien que de qualité.
Les derniers messages sur les listes de diffusion correspondantes (sweep-devel et sweep-i18n) ne montrent aucune activité en ce qui concerne la localisation française. Nous pouvons donc nous baser indifféremment sur la version de développement (dont l'installation est expliquée sur le site) tout comme la dernière version stable (sweep-0.9.0.tar.gz).
Les informaticiens sont des gens avec un gros poil dans la main. " i18n " désigne un mot qui commence par " i ", qui se termine par " n " et qui comporte 18 lettres entre ces deux extrémités.
Un mot comme " internationalization ", par exemple, fastidieux à écrire en toutes lettres...
Guette the texte...
L'archive de code source comprend – entre autres choses – un répertoire po/ contenant – entre autres choses – une multitude de fichiers à l'extension .po. De quoi s'agit-il ?
Les logiciels GNU/Linux utilisent le système gettext, un système permettant de séparer les chaînes de caractères à afficher ou attendues par un programme du code proprement dit, afin de faciliter la tâche aux traducteurs. Le système gettext fonctionne avec un certain nombre de fichiers PO ("Portable Objects"), appelés aussi "catalogues".
Pour l'instant, il n'existe aucun standard quant à la dénomination du répertoire de fichiers catalogue. Certains projets le nommeront po/, d'autres locale/, et l'on peut même se retrouver avec des fichiers .po disséminés un peu partout de manière aléatoire. Pour ce dernier cas de figure, jetez un oeil dans README-i18n (s'il existe) ou utilisez la commande find pour localiser (au premier sens du terme) les fichiers .po.
Séance de travaux manuels
En guise de démonstration, et pour mieux faire comprendre le mécanisme, je vais entreprendre ma première tentative de traduction en me servant de l'outil de base du monde GNU/Linux : un éditeur de texte. Peu importe lequel... le meilleur sera celui que vous utilisez confortablement.
Premier cas de figure : à partir d'une traduction préexistante
Repérez le fichier fr.po et ouvrez-le pour l'éditer.
$ vi fr.po
Le fichier présente une série de stances comme ceci :
#: src/main.c:89 msgid "Welcome to Sweep" msgstr "" #: src/main.c:90 msgid "" "Hello, my name is Scrubby. Welcome to Sweep!\n" "\n" "Would you like to create a new file or load an existing file?" msgstr "" #: src/main.c:94 #, fuzzy msgid "Create new file" msgstr "Coller"
Pour vous y retrouver, sachez que # introduit un commentaire. Le texte entre guillemets derrière msgid correspond au texte original. Quant à la traduction, elle figure entre guillemets derrière msgstr.
Fournissons notre premier effort de traduction et traduisons la première stance :
#: src/main.c:89 msgid "Welcome to Sweep" msgstr "Bienvenue dans Sweep"
La deuxième stance présente déjà la première difficulté sous forme de caractères spéciaux mélangés au texte. Ceux-ci sont d'une importance primordiale, et il ne faut en aucun cas les supprimer. La meilleure solution consiste ici à effecteur un copier/coller du contenu de msgid vers msgstr, puis de remplacer le texte anglais par sa traduction tout en préservant les \n indiquant un retour chariot :
#: src/main.c:90 msgid "" "Hello, my name is Scrubby. Welcome to Sweep!\n" "\n" "Would you like to create a new file or load an existing file?" msgstr "" "Bonjour, je m'appelle Scrubby! Bienvenue dans Sweep!\n" "\n" "Voulez-vous créer un nouveau fichier ou bien charger un fichier existant?"
La troisième stance nous confronte avec une erreur de traduction manifeste. L'auteur était sans doute conscient de son erreur, étant donné que la stance comporte l'annotation #, fuzzy, c'est-à -dire "approximatif". Remarquons que la présence de ce commentaire empêchera l'utilisation de la traduction. Notons également que dans le domaine de la traduction technique, il existe trois principaux "statuts" de traduction: "untranslated" (non traduit), "fuzzy" (approximatif) et "translated" (traduit).
Nous devons donc non seulement remplacer la traduction erronée par la traduction correcte, mais aussi supprimer le commentaire #, fuzzy pour que cette dernière apparaisse :
#: src/main.c:94 msgid "Create new file" msgstr "Créer un nouveau fichier"
Évidemment, rien ne vous oblige à aller jusqu'au bout. Vous pouvez très bien vérifier les fruits de ces premiers labeurs, aussi modestes fussent-ils. Compilez le logiciel et installez-le, puis lancez-le à partir d'une console en définissant les paramètres linguistiques si cela est nécessaire. Dans mon cas, j'ouvre Konsole dans KDE, et je tape ceci :
$ LANG=fr_FR.UTF-8 && sweep
Si tout s'est bien passé, la fenêtre de bienvenue de Sweep comportera d'ores et déjà les messages que vous avez traduits.
Il peut s'avérer nécessaire de vérifier le résultat d'une localisation dans le logiciel même. Dans ce cas, soyez rassuré : ce n'est pas la peine de désinstaller, reconfigurer, recompiler et réinstaller le logiciel après chaque modification apportée au fichier fr.po. Il existe un moyen bien plus simple pour vérifier votre traduction "sur le vif".
Dans le répertoire contenant fr.po, invoquez la commande suivante :
$ msgfmt -c -o sweep.mo fr.po
Cette commande compile votre seul fichier fr.po, avec un binaire résultant sweep.mo. Il ne vous reste qu'à le ranger au bon endroit, en tant que root :
# mv sweep.mo /usr/share/locale/fr/LC_MESSAGES/
Vous vous apercevez alors que les modifications effectuées prennent un effet immédiat.
Deuxième cas de figure : aucune traduction préexistante
Si vous êtes le premier à entreprendre une traduction, la manière de procéder sera quasiment identique au premier cas de figure. Repérez le fichier à l'extension POT ("Portable Object Template", c'est-à -dire "Modèle de Catalogue") et copiez-le en lui attribuant... :
- Un nom de fichier correspondant au code linguistique correspondant (
frpour le français,depour l'allemand,hupour le hongrois...). - Une extension de fichier .po.
En d'autres termes, si notre répertoire po/ n'avait pas contenu de fichier fr.po, il nous aurait suffit de faire ceci :
$ cp sweep.pot fr.po
A partir de là , nous pouvons éditer notre fichier fr.po comme dans le premier cas de figure, en prenant soin de remplacer les données génériques de l'en-tête par vos données spécifiques (votre nom, votre courrier électronique, la langue cible et l'encodage du fichier).
Trois remarques importantes concernant l'encodage
- Vous ne savez pas comment renseigner l'encodage de votre fichier
fr.po? Dans ce cas, éditez-le, enregistrez les modifications et invoquez la commandefile fr.po, qui vous renseignera sur l'encodage utilisé. - Invoquez la commande
file *.podans votre répertoirepo/... Vous vous apercevez alors que l'encodage peut varier suivant la langue utilisée :ASCII, ISO-8859-1,UTF-8, et cetera. - Si vous modifiez la variable d'environnement
LANGafin de tester votre traduction, veillez à la rétablir avant de vous relancer dans l'édition de votre fichierfr.po, sous peine de voir apparaître des hiéroglyphes à la place de vos caractères accentués.
POEdit : le couteau suisse du traducteur de logiciels
Cette première approche nous a permis de découvrir les rouages de la localisation d'un logiciel. Si vous décidez de vous lancer dans une traduction de plus grande envergure, vous souhaiterez sans doute un peu plus de confort. En outre, la présentation plus lisible d'une interface appropriée sera moins à même de vous induire en erreur.
Installation
POEdit est basé sur la bibliothèque wxWidgets, incluse dans bon nombre de distributions. Si vous ne l'avez pas, vous pouvez vous la procurer facilement à l'adresse http://www.wxwidgets.org.
Une fois que vous avez satisfait cette dépendance, installez POEdit. Au cas où votre distribution ne propose pas de paquetage binaire, l'installation à partir des sources est un jeu d'enfant, une simple affaire de ./configure && make && make install.

Utilisation
Lors du premier démarrage (en invoquant poedit), POEdit vous demande de fournir vos données d'utilisateur, à savoir votre nom et votre adresse de courrier électronique. Je vous conseille de ne pas modifier les réglages dans les autres onglets, les valeurs par défaut sont bien adaptées pour une première utilisation. Cliquez sur OK, et vous vous retrouvez face à la fenêtre principale de POEdit (Fig. 1).
Vous l'aurez deviné, POEdit ne fait qu'une seule chose, et il la fait très bien : éditer les fichiers PO.
Pour éditer un catalogue PO préexistant (comme dans le premier cas de figure décrit plus haut), faites Fichier > Ouvrir et sélectionnez le catalogue que vous souhaitez éditer.
Si, en revanche, il n'y a aucune traduction préexistante (deuxième cas de figure), créez un nouveau catalogue en cliquant sur Fichier > Nouveau catalogue depuis un fichier POT après avoir identifié le fichier POT devant servir de modèle. Ne vous inquiétez pas : en règle générale, il n'y en a qu'un seul. Vous verrez alors la fenêtre ci-dessous (Fig. 2).

Renseignez tous les champs si possible, surtout si vous comptez publier votre traduction. Pour retrouver (et éventuellement modifier) ces données ultérieurement, rendez-vous dans Catalogue > Configuration...
La fenêtre principale de POEdit est subdivisée en plusieurs zones contenant chacune des données spécifiques. La liste immédiatement en dessous de la barre d'outils contient le texte original à gauche et la traduction correspondante à droite. Dès que vous cliquez sur un des éléments, les contenus respectifs apparaissent dans la partie inférieure de la fenêtre principale, avec le texte original en haut à gauche et la traduction juste en dessous. Si le texte n'a pas encore été traduit, ce dernier restera vide.
Pour traduire, procédez par écrasement. Cliquez sur un élément non traduit et faites Edition > Copier l'original vers la traduction, ce qui fera apparaître le texte de départ dans le champ de la langue cible. Étant donné que vous effectuerez souvent cette opération, retenez le raccourci clavier [Alt]+[C], plus commode à utiliser.
Le champ de texte en bas à droite contient les méta-informations : c'est ici que le traducteur fera état de ses doutes et suggestions quant à la traduction correcte d'un élément. Le cas échéant, l'élément correspondant dans la liste de la partie supérieure de la fenêtre sera marqué par un petit crayon pour indiquer la présence d'une annotation.
Quant aux différents "stades" de traduction, POEdit les reflète également de manière très claire et lisible. Si une traduction vous paraît douteuse, marquez-la comme telle grâce à Edition > La traduction est approximative, voire en utilisant le raccourci clavier [Alt]+[U].
Un simple coup d’œil vous permet à tout moment de vérifier l'état d'avancement de la traduction. Les éléments traduits sont munis d'un petit point vert. Les termes approximatifs ("fuzzy") sont colorés en ocre. Quant au texte non traduit, il apparaît tout en haut de la liste, en bleu turquoise.
Une dernière remarque concernant un point de détail fort pratique. Chaque enregistrement de votre fichier .po va de pair avec une compilation, c'est-à -dire que lorsque vous enregistrez les modifications du fichier fr.po, vous trouverez un fichier binaire actualisé fr.mo dans ce même répertoire. Il vous suffira alors (comme nous l'avons décrit plus haut) de déplacer ce fichier fr.mo en le renommant pour visualiser la nouvelle traduction dans le logiciel même :
# cp fr.mo /usr/share/locale/fr/LC_MESSAGES/sweep.mo
Contribuer à la tour de Babel
POEdit n'est pas le seul outil de traduction dans le monde GNU/Linux. Ainsi, les deux grands projets GNOME et KDE proposent chacun un outil dédié mis à disposition des traducteurs : GTranslator et KBabel. Les deux logiciels fonctionnent à peu de choses près comme POEdit. Les différences se situent au niveau de la disposition des fenêtres et du nombre de fonctionnalités proposées.
KBabel propose un maximum de fonctionnalités, peut-être bien au détriment de sa facilité d’utilisation. Son interface quelque peu surchargée peut faire penser aux commandes d'un vaisseau spatial (Fig. 3).

Conclusion
L'univers GNU/Linux est en constante évolution. De nouveaux logiciels apparaissent chaque jour, sollicitant des efforts de traduction constants pour en faire profiter les utilisateurs des quatre coins du monde.
L'utilisation d'outils de traduction appropriés facilitera la tâche aux traducteurs sans pour autant leur demander des compétences en matière de programmation.
Liens
GNU Gettext : http://www.gnu.org/software/gettext/
POEdit : http://www.poedit.org/

