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 :

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 ""

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é :

  1. Respecter en priorité les règles d'uniformisation pour les menus

  2. Éviter deux mêmes lettres raccourcis dans une même interface
  3. Utiliser de préférence la première lettre d'un mot
  4. É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"