44.2. Pour le d�veloppeur

44.2.1. M�caniques

Cette section explique comment impl�menter le support natif d'une langue 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. Le code suivant est ins�r� 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 habituel consiste � utiliser

    #define _(x) gettext(x)

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

  3. Un fichier nls.mk est ajout� 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 alternative. Il se peut que cette liste inclut pratiquement tous les fichiers sources du programme. Si cette liste est trop longue, le premier <<�fichier�>> peut �tre remplac� par un + et le deuxi�me mot repr�senter un fichier contenant un nom de fichier par ligne.

    GETTEXT_TRIGGERS

    Les outils qui engendrent 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 _ ou d'autres identifiants sont utilis�s, il est n�cessaire 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.