Sommaire
Structure d'un fichier po
Le traducteur travaille uniquement sur les fichiers .po. Ce sont de simples fichiers texte qui associent une chaîne originale en anglais à une chaîne traduite en fonction d'un fichier source. Ils possèdent deux parties :
TRADUCTEUR : votre travail sera indiqué de cette manière dans la suite de ce document !
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.
TRADUCTEUR :
modifier l'année du Copyright : si nous sommes en 2012 Copyright (C) 2005-2006 => Copyright (C) 2005-2012
ajouter (si vous le souhaitez) votre nom, prénom <email>, année (cela ne sera pas ajouté par quelqu'un d'autre !)
L'en-tête se poursuit avec la première chaîne. Celle-ci est particulière, elle contient toujours une chaîne originale msgid vide et une chaîne 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 :
"Project-Id-Version: Evince 0.5.5\n" : indique le nom du logiciel et sa version. À ne pas modifier a priori.
"Report-Msgid-Bugs-To: \n" : indique normalement où rapporter les bogues de traduction. À ne pas modifier a priori.
"POT-Creation-Date: 2007-01-13 01:39+0100\n" : indique la date de dernière mise à jour du fichier source POT. À ne pas modifier a priori.
"PO-Revision-Date: 2007-01-13 09:03+0100\n" : indique la date de la dernière mise à jour du fichier traduit. Vous DEVEZ modifier cette date si vous apportez des modifications à la traduction. Veuillez également respecter le format de date utilisé AAAA-MM-JJ HH:mm+décalage horaire.
"Last-Translator: Robert-André Mauchin <zebob.m@gmail.com>\n" : nom du dernier traducteur ayant apporté des modifications à la traduction. Vous DEVEZ modifier cette valeur en indiquant votre nom suivi de votre adresse électronique.
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n" : indique le nom de l'équipe auquel appartient le traducteur et la traduction, suivi de la liste de diffusion de l'équipe. Ne doit pas être modifié sauf en cas de traduction initiale, dans ce cas mettre GNOME French Team.
"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" apporte respectivement des informations sur le type de fichier, sur le codage et sur la forme de pluriel utilisés par la langue cible (ici le français). Ils ne doivent pas en principe être modifiés
TRADUCTEUR : il est impératif que cet en-tête soit présent afin que le fichier po soit valide. Notez également que chaque ligne se termine par « \n » indiquant un retour à la ligne.
Modifier la date PO-Revision-Date en respectant le format : AAAA-MM-JJ HH:mm+décalage horaire
Modifier le nom du dernier traducteur Last-Translator
Les chaînes à traduire
Une chaîne classique
Voici un exemple classique de chaîne à traduire issu d’evince :
#. this is EOF #: ../backend/dvi/mdvi-lib/dviread.c:208 msgid "unexpected EOF\n" msgstr ""
La première ligne débutant par un dièse et un point (#.) correspond à un commentaire écrit par le programmeur et extrait du fichier source (ici dviread.c, à la ligne 208). Il donne le plus souvent une indication (en anglais) de contexte au traducteur.
La deuxième ligne débutant par un dièse et un deux-points (#:) est suivie par la liste des fichiers source contenant la ligne à traduire, avec le numéro de ligne où est rencontrée la chaîne.
La troisième ligne débutant par « msgid » correspond à la chaîne originale à traduire. Elle ne doit jamais être modifiée.
La dernière ligne débutant par « msgstr » correspond à la chaîne traduite. Dans cet exemple, elle n'est pas traduite. Vous devez saisir entre les "" la traduction que vous proposez comme ceci :
msgstr "Fin de fichier non attendue\n"
Notez que la version française doit respecter les sauts de ligne « \n » imposés par la version anglaise pour que le fichier soit valide. Mais rien n'empêche d'en ajouter plus que dans la chaîne 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 chaîne 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 largeur de ligne de plus de 80 colonnes. Au-delà, il faut couper la chaîne à traduire à la fin d'un mot puis continuer la chaîne à la ligne suivante. Il est d'usage de mettre l'espace séparant les mots à la fin de la chaîne coupée.
Les tabulations sont 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 qu'ils ne soient pas interprétés comme une fin de ligne ou un caractère spécial.
TRADUCTEUR :
- Saisir votre traduction entre les guillemets doubles
- Respecter les « \n » et « \t » de la version originale
Les variables dans les chaînes
Vous allez également rencontrer des chaînes 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 doivent être présentes en même nombre que dans la chaîne anglaise, sinon le fichier ne sera pas considéré comme valide. La ligne débutant par un dièse et une virgule (#,) est ici suivie 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 » suivie du mot « page » contient toujours la valeur « 1 », il est préférable de traduire la chaîne en « une page », plutôt qu'en « %s page » ce qui afficherait « 1 page » pour l'utilisateur. Si l'on traduit alors la chaîne par « une page », il ne faut pas oublier pour autant que l'absence de variable dans la chaîne 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 chaînes à pluriel
gettext permet également de traduire les pluriels. Une chaîne 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 chaînes à traduire : la première commençant classiquement par « msgid » indique la chaîne au singulier, la seconde commençant « msgid_plural » indique la chaîne au pluriel. Les versions traduites débutent comme d'habitude par « msgstr » mais sont en plus suivies d'un chiffre entre crochets. « msgstr[0] » indique la version traduite au singulier, et « msgstr[1] » indique les versions traduites au pluriel. En français on ne dépassera jamais la valeur de « 1 », mais dans certaines langues, il existe plusieur formes de pluriel.
Les chaînes à 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 chaînes soient ajoutées et que d'autres soient modifiées. Dans ce dernier cas, la chaîne traduite est alors marquée comme « fuzzy » ou approximative 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 chaîne traduite ne correspond pas à une traduction conforme de la chaîne originale. Vous devez 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 chaîne comme « approximative » 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 chaîne marquée « fuzzy » sera affichée en anglais dans l'interface graphique du programme.
Dans certains cas, la chaîne originale précédente se trouve en commentaire à la suite de la ligne fuzzy :
#| msgid "Failed to load file “%s”"
Ceci permet de voir plus facilement ce qui a changé dans la chaîne originale. Cette partie doit également être supprimée après la mise à jour de la traduction. Il existe un greffon additionnel pour le logiciel gedit permettant d'afficher les différences entre les deux chaînes et d'en trouver plus facilement les différences (voir le greffon Msgid Diff ici).
Les lettres raccourcis
On trouve fréquemment dans l'interface des programmes, des lettres soulignées (dans les menus, les textes d'options, etc.) qui permettent d'utiliser une application avec le clavier au lieu de la souris. Dans les fichiers po (pour les programmes basés sur GTK en tout cas), ceci apparaît sous la forme d'un caractère soulignement avant la lettre qui apparaîtra soulignée dans l'interface. Par exemple :
msgid "_File" msgstr "_Fichier"
Dans l'idéal, on choisit la première lettre. Mais le but est d'éviter au maximum deux fois la même lettre soulignée dans une même interface. Ce n'est pas toujours possible, mais la seule façon de s'en assurer, c'est de tester la traduction « pour de vrai ».
Voici les règles à respecter dans l'ordre de priorité :
Respecter en priorité les règles d'uniformisation pour les menus
- Éviter deux mêmes lettres raccourcis dans une même interface
- Utiliser de préférence la première lettre d'un mot
- Éviter si possible de placer le raccourci sur les lettres « courtes » (i, j, l) et celles à « jambages » (p,g,f,q).
Note : l'utilisation de la même lettre qu'en anglais n'apporte rien.
Les crédits des traducteurs
Il existe dans certaines traductions une chaîne particulière msgid "translator-credits". Cette chaîne ne doit pas être traduite, mais doit contenir les noms des contributeurs à la traduction. Voici par exemple les crédits de gnome-panel :
#. Translator credits 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 apporté une contribution à la traduction, vous devez vous ajouter à cette liste en prenant soin de séparer les contributeurs par un saut de ligne « \n ».
Les chaînes à contexte
Dans certains cas, plutôt que d'ajouter un commentaire, les développeurs indiquent un contexte de traduction directement dans la chaîne à traduire. La chaîne se présente alors ainsi : « contexte|chaîne à traduire ». Il faut alors faire très attention de ne pas traduire le contexte qui se trouve devant la barre verticale « | », mais uniquement la chaîne 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"
Progressivement, cette syntaxe est remplacée par une nouvelle possibilité de gettext, la ligne msgctxt :
#: ../gnome-panel/panel-menu-items.c:598 msgctxt "Desktop Folder" msgid "Desktop" msgstr "Bureau"