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.
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 (en travaillant à partir du Git, il
sera toujours utile). 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.
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. Les commentaires #:
indiquent 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.
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
, où
langue
.polangue
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
où langue
_region
.poregion
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 :
make 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
. On peut alors l'éditer.
Pour faire savoir qu'une nouvelle langue est disponible, il faut également éditer
le fichier langue
.ponls.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 :
make 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. Le nouveau
fichier PO est sauvegardé avec l'extension .po.new
.
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
a
besoin de suivre immédiatement le %, avant tout autre manipulateur de
format (cette fonctionnalité existe réellement dans la famille des
fonctions chiffre
$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 53.3 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.