46.1. Pour le traducteur
Les programmes PostgreSQL™
(serveur et client) peuvent afficher leur message dans la langue
préférée de l'utilisateur -- si les messages ont été traduits.
Créer et maintenir les ensembles de messages traduits nécessite
l'aide de personnes parlant leur propre langue et souhaitant
contribuer à PostgreSQL™. Il
n'est nul besoin d'être un développeur pour cela. Cette section
explique comment apporter son aide.
46.1.1. Prérequis
Les compétences dans sa langue d'un traducteur ne seront pas
jugées -- cette section concerne uniquement les outils logiciels.
Théoriquement, seul un éditeur de texte est nécessaire. Mais ceci
n'est vrai que dans le cas très improbable où un traducteur ne
souhaiterait pas tester ses traductions des messages. Lors de la
configuration des sources, il faudra s'assurer d'utiliser
l'option --enable-nls. Ceci assurera
également la présence de la bibliothèque libintl et du programme msgfmt dont tous les utilisateurs finaux ont
indéniablement besoin. Pour tester son travail, il sera utile de
suivre les parties pertinentes des instructions d'installation.
Pour commencer un nouvel effort de traduction ou pour faire un
assemblage de catalogues de messages (décrit ci-après), il faudra
installer respectivement les programmes xgettext et msgmerge
dans une implémentation compatible GNU. Il est prévu dans le
futur que xgettext ne soit plus
nécessaire lorsqu'une distribution empaquetée des sources est
utilisée (à partir du CVS, il en sera toujours besoin).
GNU Gettext 0.10.36 ou
ultérieure est actuellement recommandé.
Toute implémentation locale de gettext devrait être disponible
avec sa propre documentation. Une partie en est certainement
dupliquée dans ce qui suit mais des détails complémentaires y
sont certainement disponibles.
46.1.2. Concepts
Les couples de messages originaux (anglais) et de leurs
(possibles) traductions sont conservés dans les catalogues de messages, un pour chaque programme
(bien que des programmes liés puissent partager un catalogue de
messages) et pour chaque langue cible. Il existe deux formats de
fichiers pour les catalogues de messages : le premier est le
fichier « PO » (pour
"Portable Object" ou Objet Portable), qui est un fichier texte
muni d'une syntaxe spéciale et que les traducteurs éditent. Le
second est un fichier « MO »
(pour "Machine Object" ou Objet Machine), qui est un fichier
binaire engendré à partir du fichier PO respectif et qui est
utilisé lorsque le programme internationalisé est exécuté. Les
traducteurs ne s'occupent pas des fichiers MO ; en fait,
quasiment personne ne s'en occupe.
L'extension du fichier de catalogue de messages est, sans
surprise, soit .po, soit .mo. Le nom de base est soit le nom du programme
qu'il accompagne soit la langue utilisée dans le fichier, suivant
la situation. Ceci peut s'avérer être une source de confusion.
Des exemples sont psql.po (fichier PO
pour psql) ou fr.mo (fichier MO en
français).
Le format du fichier PO est illustré ici :
# commentaire
msgid "chaîne originale"
msgstr "chaîne traduite"
msgid "encore une originale"
msgstr "encore une de traduite"
"les chaînes peuvent être sur plusieurs lignes, comme ceci"
...
Les chaînes msgid sont extraites des sources du programme. (Elles
n'ont pas besoin de l'être mais c'est le moyen le plus commun).
Les lignes msgstr sont initialement vides puis complétées avec
les chaînes traduites. Les chaînes peuvent contenir des
caractères d'échappement de style C et peuvent être sur plusieurs
lignes comme le montre l'exemple ci-dessus (la ligne suivante
doit démarrer au début de la ligne).
Le caractère # introduit un commentaire. Si une espace fine suit
immédiatement le caractère #, c'est qu'il s'agit là d'un
commentaire maintenu par le traducteur. On trouve aussi des
commentaires automatiques qui n'ont pas d'espace fine suivant
immédiatement le caractère #. Ils sont maintenus par les
différents outils qui opèrent sur les fichiers PO et ont pour but
d'aider le traducteur.
#. commentaire automatique
#: fichier.c:1023
#, drapeau, drapeau
Les commentaires du style #. sont extraits du fichier source où
le message est utilisé. Il est possible que le développeur ait
ajouté des informations pour le traducteur, telles que
l'alignement attendu. Le commentaire #: indique l'emplacement
exact où le message est utilisé dans le source. Le traducteur n'a
pas besoin de regarder le source du programme, mais il peut le
faire s'il subsiste un doute sur l'exactitude d'une traduction.
Le commentaire #, contient des drapeaux décrivant le message
d'une certaine façon. Il existe actuellement deux drapeaux :
fuzzy est positionné si le message
risque d'être rendu obsolète par des changements dans les
sources. Le traducteur peut alors vérifier ceci et supprimer ce
drapeau. Notez que les messages « fuzzy » ne sont pas accessibles à
l'utilisateur final. L'autre drapeau est c-format indiquant que le message utilise le
format de la fonction C printf. Ceci
signifie que la traduction devrait aussi être de ce format avec
le même nombre et le même type de paramètres fictifs. Il existe
des outils qui vérifient que le message est une chaîne au format
printf et valident le drapeau c-format en conséquence.
46.1.3. Créer et maintenir des catalogues de messages
OK, alors comment faire pour créer un catalogue de messages
« vide » ? Tout d'abord, se
placer dans le répertoire contenant le programme dont on souhaite
traduire les messages. S'il existe un fichier nls.mk, alors ce programme est préparé pour la
traduction.
S'il y a déjà des fichiers .po, alors
quelqu'un a déjà réalisé des travaux de traduction. Les fichiers
sont nommés
langue
.po, où
langue
est le code de langue sur deux
caractères (en minuscules) tel que défini par l'
ISO
639-1, le code du pays composé de deux lettres en
minuscule
, c'est-à-dire fr.po
pour le français. S'il existe réellement un besoin pour plus
d'une traduction par langue, alors les fichiers peuvent être
renommés
langue
_
region
.po où
region
est le code de langue sur deux
caractères (en majuscules), tel que défini par l'
ISO
3166-1, le code du payes sur deux lettres en majuscule
,
c'est-à-dire pt_BR.po pour le portugais
du Brésil. Si vous trouvez la langue que vous souhaitez, vous
pouvez commencer à travailler sur ce fichier.
Pour commencer une nouvelle traduction, il faudra préalablement
exécuter la commande
gmake init-po
Ceci créera un fichier
nomprog
.pot. (.pot pour le distinguer des fichiers PO qui sont
« en production ». Le
T signifie « template » (NdT : modèle en anglais). On
copiera ce fichier sous le nom
langue
.po. On peut alors
l'éditer. Pour faire savoir qu'une nouvelle langue est
disponible, il faut également éditer le fichier nls.mk et y ajouter le code de la langue (ou de
la langue et du pays) avec une ligne ressemblant à ceci :
AVAIL_LANGUAGES := de fr
(d'autres langues peuvent apparaître, bien entendu).
À mesure que le programme ou la bibliothèque change, des messages
peuvent être modifiés ou ajoutés par les développeurs. Dans ce
cas, il n'est pas nécessaire de tout recommencer depuis le début.
À la place, on lancera la commande
gmake update-po
qui créera un nouveau catalogue de messages vides (le fichier pot
avec lequel la traduction a été initiée) et le fusionnera avec
les fichiers PO existants. Si l'algorithme de fusion a une
incertitude sur un message particulier, il le marquera
« fuzzy » comme expliqué
ci-dessus. Dans la cas où quelque chose se passerait mal,
l'ancien fichier PO est sauvegardé avec une extension .po.old.
46.1.4. Éditer les fichiers PO
Les fichiers PO sont éditables avec un éditeur de texte standard.
Le traducteur doit seulement modifier l'emplacement entre les
guillemets après la directive msgstr, peut ajouter des
commentaires et modifier le drapeau fuzzy (NdA : Il existe, ce
qui n'est pas surprenant, un mode PO pour Emacs, que je trouve
assez utile).
Les fichiers PO n'ont pas besoin d'être entièrement remplis. Le
logiciel retournera automatiquement à la chaîne originale si une
traduction n'est pas disponible ou est laissée vide. Soumettre
des traductions incomplètes pour les inclure dans l'arborescence
des sources n'est pas un problème ; cela permet à d'autres
personnes de récupérer le travail commencé pour le continuer.
Néanmoins, les traducteurs sont encouragés à donner une haute
priorité à la suppression des entrées fuzzy après avoir fait une
fusion. Les entrées fuzzy ne seront pas installées ; elles
servent seulement de référence à ce qui pourrait être une bonne
traduction.
Certaines choses sont à garder à l'esprit lors de l'édition des
traductions :
-
S'assurer que si la chaîne originale se termine par un
retour chariot, la traduction le fasse bien aussi. De même
pour les tabulations, etc.
-
Si la chaîne originale est une chaîne au format printf, la traduction doit l'être aussi. La
traduction doit également avoir les même spécificateurs de
format et dans le même ordre. Quelques fois, les règles
naturelles de la langue rendent cela impossible ou tout au
moins difficile. Dans ce cas, il est possible de modifier
les spécificateurs de format de la façon suivante :
msgstr "Die Datei %2$s hat %1$u Zeichen."
Le premier paramètre fictif sera alors utilisé par le
deuxième argument de la liste. Le
chiffre
$ a besoin de
suivre immédiatement le %, avant tout autre manipulateur de
format (cette fonctionnalité existe réellement dans la
famille des fonctions printf,
mais elle est peu connue, n'ayant que peu d'utilité en
dehors de l'internationalisation des messages).
-
Si la chaîne originale contient une erreur linguistique, on
pourra la rapporter (ou la corriger soi-même dans le source
du programme) et la traduire normalement. La chaîne
corrigée peut être fusionnée lorsque les programmes sources
auront été mis à jour. Si la chaîne originale contient une
erreur factuelle, on la rapportera (ou la corrigera
soi-même) mais on ne la traduira pas. À la place, on
marquera la chaîne avec un commentaire dans le fichier PO.
-
Maintenir le style et le ton de la chaîne originale. En
particulier, les messages qui ne sont pas des phrases
(cannot open file %s, soit
ne peut pas ouvrir le fichier %s)
ne devraient probablement pas commencer avec une lettre
capitale (si votre langue distingue la casse des lettres)
ou finir avec un point (si votre langue utilise des marques
de ponctuation). Lire Section 45.3,
« Guide de style des messages d'erreurs »
peut aider.
-
Lorsque la signification d'un message n'est pas connue ou
s'il est ambigü, on pourra demander sa signification sur la
liste de diffusion des développeurs. Il est possible qu'un
anglophone puisse aussi ne pas le comprendre ou le trouver
ambigü. Il est alors préférable d'améliorer le message.