44.2. Pour le développeur

44.2.1. Mécaniques

Cette section décrit comment implémenter le support natif d'un langage dans un programme ou dans une bibliothèque qui fait partie de la distribution PostgreSQL. Actuellement, cela s'applique uniquement aux programmes C.

Ajouter le support NLS à un programme

  1. Insérez le code suivant dans la séquence initiale du programme :

    #ifdef ENABLE_NLS
    #include <locale.h>
    #endif
    
    ...
    
    #ifdef ENABLE_NLS
    setlocale(LC_ALL, "");
    bindtextdomain("nomprog", LOCALEDIR);
    textdomain("nomprog");
    #endif

    (nomprog peut être choisi tout à fait librement.)

  2. Partout où un message candidat à la traduction est trouvé, un appel à gettext() doit être inséré. Par exemple :

    fprintf(stderr, "panic level %d\n", lvl);

    devra être changé avec

    fprintf(stderr, gettext("panic level %d\n"), lvl);

    (gettext est défini comme une opération nulle si NLS n'est pas configuré.)

    Cela peut engendrer du fouillis. Un raccourci commun est d'utiliser

    #define _(x) gettext(x)

    Une autre solution est envisageable si le programme effectue la plupart de ses communications via une ou un nombre restreint de fonctions, telle ereport() pour le moteur. Ainsi, vous modifiez le fonctionnement interne de cette fonction pour qu'elle appelle gettext pour toutes les chaînes en entrée.

  3. Ajoutez un fichier nls.mk dans le répertoire des sources du programme. Ce fichier sera lu comme un makefile. Les affectations des variables suivantes doivent être réalisées ici :

    CATALOG_NAME

    Le nom du programme tel que fourni lors de l'appel à textdomain().

    AVAIL_LANGUAGES

    Liste des traductions fournies — initialement vide.

    GETTEXT_FILES

    Liste des fichiers contenant les chaînes traduisibles, c'est-à-dire celles marquées avec gettext ou avec une solution altenative. Éventuellement, ceci incluera pratiquement tous les fichiers sources du programme. Si cette liste est trop longue, vous pouvez remplacer le premier << fichier >> par un + et laisser le deuxième mot représenter un fichier contenant un nom de fichier par ligne.

    GETTEXT_TRIGGERS

    Les outils qui génèrent des catalogues de messages pour les traducteurs ont besoin de connaître les appels de fonction contenant des chaînes à traduire. Par défaut, seuls les appels à gettext() sont reconnus. Si vous utilisez _ ou d'autres identifiants, vous avez besoin de les lister ici. Si la chaîne traduisible n'est pas le premier argument, l'élément a besoin d'être de la forme func:2 (pour le second argument).

Le système de construction s'occupera automatiquement de construire et installer les catalogues de messages.

44.2.2. Guide d'écriture des messages

Voici quelques lignes de conduite pour l'écriture de messages facilement traduisibles.