Présentation

Les applications GNOME utilisent toutes le système de traduction gettext créé par le projet GNU. Le principe de gettext est de remplacer les chaines de la version originale en anglais par les chaines traduites au moment de l'exécution du logiciel.
L'ensemble des chaînes à traduire pour une application sont réunies dans un fichier .POT (Portable Object Template) localisé dans un répertoire po/ dans les sources de cette application. Chaque langue utilise ce fichier comme base pour démarrer une traduction. Une fois le fichier traduit, il est enregistré sous le nom XX.po, où XX est le code de la langue, par exemple fr.po. Les fichiers .po (Portable Object) sont par la suite transformés en fichier .mo (Machine Object) lors de la compilation.
Chaque application possède ainsi un fichier PO pour chacune des langues dans lesquelles elle est traduite (es.po, de.po, etc). Les modules hébergés sur le SVN de GNOME contiennent tous un répertoire nommé po contenant ces fichiers.
Pour davantage d'informations à ce sujet, consultez le manuel gettext ou les conseils destinés aux développeurs GNOME.

Structure d'un fichier po

Le traducteur travaille sur les fichiers .po. Ce sont de simples fichiers texte qui associent une chaine originale à la chaine traduite en fonction d'un fichier source. Ils se présentent typiquement comme ceci :

L'en-tête

Voici un exemple d'en-tête issu de la traduction du logiciel evince :

# French translation of evince.
# Copyright (C) 2005-2006 The Free Software Foundation, Inc.
# This file is distributed under the GNU General Public License Version 2.
#
# Vincent Carriere <carriere_vincent@yahoo.fr>, 2005.
# Christophe Merlet (RedFox) <redfox@redfoxcenter.org>, 2005-2006.
# Vincent Untz <vuntz@gnome.org>, 2005.
# Thomas Vergnaud <thomas.vergnaud@laposte.net>, 2006.
# Guillaume Desmottes <cass@skynet.be>, 2006.
# Jonathan Ernst <jonathan@ernstfamily.ch>, 2006.
# Robert-André Mauchin <zebob.m@gmail.com>, 2006-2007.
# Damien Durand <splinux@fedoraproject.org>, 2006.
#

Les lignes débutant par un dièse indiquent des commentaires. La première correspond à l'intitulé du fichier, et les deux suivantes à la licence du logiciel traduit. Il est impératif de prendre connaissance de la licence du logiciel avant de commencer toute traduction ! Viennent ensuite la liste des contributeurs à la traduction par ordre chronologique.
L'en-tête se poursuit avec la première chaîne. Celle-ci est particulière, elle contient toujours une chaine originale vierge, et une chaine traduite contenant des informations sur le fichier de traduction comme ceci :

msgid ""
msgstr ""
"Project-Id-Version: Evince 0.5.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-01-13 01:39+0100\n"
"PO-Revision-Date: 2007-01-13 09:03+0100\n"
"Last-Translator: Robert-André Mauchin <zebob.m@gmail.com>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"

Nous allons détailler le contenu de ces chaînes :

Il est impératif que cet en-tête soit présent afin que le fichier po soit valide. Son absence empêcherait la compilation du fichier. Notez également que chaque ligne se termine par « \n » indiquant un retour à la ligne.

Les chaines à traduire

Une chaine classique

Voici un exemple classique de chaine à traduire issu d’evince :

#. this is EOF
#: ../backend/dvi/mdvi-lib/dviread.c:208
msgid "unexpected EOF\n"
msgstr ""

msgstr "Fin de fichier non attendue\n"

Notez que la version française doit respecter les sauts de ligne « \n » en fin de chaine pour que le fichier soit valide. Mais rien n'empêche d'en ajouter plus que dans la chaine originale, comme nous le verrons par la suite. Vous pouvez également faire des retours à la ligne dans votre traduction comme ceci :

msgstr "Fin de fichier "
"non attendue\n"

Cette disposition n'aura aucune incidence sur l'affichage de la chaine traduite dans le programme, mais permet simplement de disposer la traduction sur plusieurs lignes afin que celle-ci soit plus lisible. Il est en général conseillé de ne pas dépasser une longueur de chaine de plus de 80 colonnes, il faut alors couper la chaine à traduire à la fin d'un mot puis continuer la chaine à la ligne suivante. Il est d'usage de mettre l'espace séparant les mots à la fin de la chaine coupée.
Les tabulations sont elles représentées par « \t ». Si vous avez à inclure des guillemets droits « " » ou une barre oblique inverse « \ » dans votre traduction, il faut faire précéder ceux-ci d'une barre oblique inverse comme ceci « \" » « \\ » pour que ceux-ci ne soit pas interprétés comme une fin de ligne ou un caractère spécial.

Les variables dans les chaines

Vous allez également rencontrer des chaines contenant des variables comme celles-ci :

#: ../shell/ev-page-action.c:77
#, c-format
msgid "(%d of %d)"
msgstr "(%d sur %d)"

Les variables commencent par un signe « % » Elles doit être présentes en même nombre que dans la chaine anglaise, sinon le fichier ne sera pas considéré comme valide. La ligne débutant par un dièse et une virgule est ici suivi par le type de langage auquel appartient la variable. Dans notre cas il s'agit d'une variable de type C « #, c-format », mais cela peut également être « csharp-format », « python-format », etc.
Dans certains cas il peut être utile de ne pas afficher le contenu de la variable. Par exemple si la variable « %s » suivi du mot « page » contient toujours la valeur « 1 », il est préférable de traduire la chaine en « une page », plutôt qu'en « %s page » ce qui afficherait « 1 page » pour l'utilisateur. Si l'on traduit alors la chaine par « une page », il ne faut oublier pour autant que l'absence de variable dans la chaine traduite provoque une erreur. Pour l'éviter nous ajoutons à la variable « %s » un zéro après le signe « % » comme ceci : « %0s ». Il n'y aura alors pas d'erreur et la valeur de la variable ne sera pas affichée. Concrètement cela donne :

#, c-format
msgid "Print %s page"
msgstr "Imprimer une %0s page"

Les chaines à pluriel

gettext permet également de traduire les pluriels. Une chaine avec un pluriel se présente ainsi :

#: ../shell/ev-view.c:4084
#, c-format
msgid "%d found on this page"
msgid_plural "%d found on this page"
msgstr[0] "Trouvé %d fois sur cette page"
msgstr[1] "Trouvés %d fois sur cette page"

On constate qu'il y a deux chaines à traduire, la première commençant classiquement par « msgid » indique la chaine au singulier, la seconde commençant « msgid_plural » indique la chaine au pluriel. Les versions traduites débutent comme d'habitude par « msgstr » mais est en plus suivi d'un chiffre entre crochets. « msgstr[0] » indique la version traduite au singulier, et « msgstr[1] » ou avec des chiffres supérieurs indique les versions traduites au pluriel. En français on ne dépassera jamais la valeur de « 1 », mais dans certaines langues il existe plus d'une forme de pluriel.

Les chaines à relire ou fuzzy

Dans le cas de mise à jour d'un fichier po lors de la modification des sources du logiciel, il est probable que de nouvelles chaines soient ajoutées, et que d'autres soient modifiées. Dans ce dernier cas, la chaine traduite est alors marquée comme « fuzzy » ou à relire comme dans l'exemple qui suit :

#: ../shell/ev-window.c:1605
#, fuzzy, c-format
msgid "Failed to create file “%s”: %s"
msgstr "Le chargement du document « %s » a échoué"

La chaine traduite ne correspond pas à une traduction conforme de la chaine originale, vous devez alors la corriger puis supprimer le mot-clé « ,fuzzy » comme ceci :

#: ../shell/ev-window.c:1605
#, c-format
msgid "Failed to create file “%s”: %s"
msgstr "La création du fichier « %s » a échoué : %s"

Vous pouvez aussi indiquer une chaine comme « à relire » en ajoutant le mot-clé « fuzzy » si vous pensez que votre traduction est ambiguë et que vous souhaitez que le relecteur y fasse particulièrement attention. Dans ce cas il peut être utile d'y joindre un commentaire. Une chaine marquée « fuzzy » sera affichée en anglais lors de l'exécution du programme.

Les chaines à contexte

Dans certains cas, plutôt que d'ajouter un commentaire, les développeurs indiquent un contexte de traduction directement dans la chaine à traduire. La chaine se présente alors ainsi : « contexte|chaine à traduire ». Il faut alors faire très attention ne pas traduire le contexte qui se trouve devant la barre verticale « | », mais uniquement la chaine située après cette barre. Voici un exemple issu de la traduction de gnome-panel :

#: ../gnome-panel/panel-menu-items.c:598
msgid "Desktop Folder|Desktop"
msgstr "Bureau"

Les crédits des traducteurs

Il existe dans certaines traductions une chaine particulière « msgid "translator-credits" ». Cette chaine ne doit pas être traduite mot à mot, mais doit contenir le nom des contributeurs à la traduction. Voici par exemple les crédits de gnome-panel :

#. Translator credits
#: ../applets/clock/clock.c:2813 ../applets/fish/fish.c:588
#: ../applets/notification_area/main.c:158
#: ../applets/wncklet/showdesktop.c:531 ../applets/wncklet/window-list.c:783
#: ../applets/wncklet/window-menu.c:75
#: ../applets/wncklet/workspace-switcher.c:555
#: ../gnome-panel/panel-context-menu.c:133
msgid "translator-credits"
msgstr ""
"Mainteneur :\n"
"Christophe Merlet (RedFox) <redfox@redfoxcenter.org>\n"
"\n"
"Contributeurs :\n"
"Christophe Fergeau <teuf@users.sourceforge.net>\n"
"Baptiste Mille-Mathias <bmm80@free.fr>\n"
"Benoît Dejean <benoit@placenet.org>\n"
"Robert-André Mauchin <zebob.m@gmail.com>\n"
"Damien Durand <splinux@fedoraproject.org>"

Si vous avez apportez une contribution à la traduction, vous devez vous ajouter à cette liste en prenant soin de séparer les contibuteurs par un saut de ligne « \n ».

Les outils d'édition des fichiers po

Il existe certains outils spécialisés dans l'édition de fichier po. Parmi eux nous citerons :

Ces logiciels ont des fonctions avancées, comme la mise à jour automatique de l'en-tête, la recherche à travers les chaines traduites ou originales, un glossaire, la gestion automatique des « fuzzy », etc.

Mais dans la majorité des cas un simple éditeur de texte comme Emacs,Vim ou gedit sera largement suffisant.

Emacs dispose d'un mode PO très utile, qui permet de se déplacer aisément sur les chaines et d'afficher la chaine à traduire dans son contexte (code source). Pour plus d'informations, consultez http://www.gnu.org/software/gettext/manual/html_node/gettext_7.html#SEC7. Pour afficher les espaces insécables dans Emacs 21 (actif par défaut avec Emacs 22), vous pouvez ajouter ce code dans votre .emacs :

;; espace insécable mise en évidence
;; faire un customize de nsbp-face pour obtenir la couleur de son choix
(make-face 'nbsp-face)
(require 'disp-table)
(aset standard-display-table
      (make-char 'latin-iso8859-1 (- ?\240 128))
      (vector (+ ?\267 (* 524288 (face-id 'nbsp-face)))))

gnomefr/FichierPO (last edited 2008-01-13 17:43:02 by localhost)

Site hébergé par Ikoula.