LOCALE(7)

NAME
locale - Description du support multi-langages.

SYNOPSIS
#include <locale.h>

DESCRIPTION
Un localisation est un ensemble de regles linguistiques et culturelles. Ceci couvre des aspects tels que la langue utilisee pour les messages, le jeu de caracteres, les convention lexicographiques etc... Un programme doit etre capable de determiner sa localisation et d'agir en consequence pour etre portable dans divers environnements culturels.

Le fichier d'en-tete <locale.h> declare les types de donnees, les fonctions et les macros utilises pour ces taches.

Les fonctions qu'il declare sont setlocale() pour indiquer la localisation et localeconv() pour obtenir des informations sur le formattage des nombres.

Il existe differentes categories d'informations locales qui peuvent ettre utiles a un programme. Elles sont declarees en tant que macros. En les utilisant comme premier argument de la fonction setlocale(), il devient possible de fixer l'une de ces informations :

LC_COLLATE
    est utilise pour modifier le comportement des fonctions strcoll() et strxfrm(), qui permettent les comparaisons de chaines dans l'alphabet local. Par exemple le double-s allemand, est ordonne comme 'ss'.

LC_TYPE
    permet de modifier les manipulations et classifications de caracteres, comme celles des fonctions isupper() et toupper(), et celles des fonctions travaillant sur des caracteres multi-octets comme mblen() ou wctomb().

LC_MONETARY
    modifie les informations renvoyees par localeconv() pour decrire le formattage habituel des nombres, en accord avec des details comme le point decimal ou la virgule decimale. Ces informations sont utilisees par les fonctions strfmon().

LC_MESSAGES
    configure la langue utilisee pour afficher les messages, et la saisie de reponses affirmatives ou negatives. La bibliotheque C GNU contient la fonction rpmatch() pour aider a utiliser ces donnees.

LC_NUMERIC
    modifie les informations utilisees par les fonctions des familles printf() et scanf(), lorsqu'elles doivent utiliser la configuration locale. Ces donnees peuvent egalement etre obtenues avec la fonction localeconv().

LC_TIME
    modifie le comportement de la fonction strftime() affichant l'heure dans un format local. Par exemple la plupart de l'Europe utilise un format horaire sur 24 heures, alors que les USA utilisent un format sur 12 heures.

LC_ALL
    regroupe toutes les categories ci-dessus.

Si le second argument de la fonction setlocale() est une chaine de caracteres vide, "", ceci correspond a la localisation par defaut, determinee avec les etapes suivantes :

1.  Si une variable d'environnement LC_ALL n'est pas nulle, sa valeur est utilisee.

2.  Si une variable d'environnement ayant le meme nom que les categories mentionnees ci-dessus est non nulle, sa valeur est utilisee pour la categorie en question.

3.  Si une variable d'environnement LANG est non nulle, sa valeur est utilisee.

Les valeurs concernant le formattage numerique sont disponibles dans une structure struct lconv, renvoyee par la fonction localeconv(), declaree ainsi :
struct lconv
{
  /* -------- Informations numeriques (non-monetaires) ------- */
  char *decimal_point;    /* Separateur decimal                 */
  char *thousands_sep;    /* Separateur des milliers            */
  /*
   * Chaque element  indique  un  nombre de chiffres  dans  chaque
   * groupe.
   * Les elements d'indice les plus eleves correspondent aux grou-
   * pes les plus a gauche.
   * Un element de valeur CHAR_MAX signifie l'arret du groupement.
   * Un element de valeur 0  signifie que  l'element precedent est
   * utilise pour tous les groupes plus a gauche.
   *
   * NDT : c'est pas clair ? ben, la V.O. non plus !  ;-)
   */
  char *grouping;
  /* ----------------- Informations monetaires ---------------- */
  /* Les trois premiers caracteres correspondent au symbole     */
  /* monetaire d'apres ISO 4217. Le quatrieme symbole est le    */
  /* separateur, le cinquieme est '\0'.                         */
  char *int_curr_symbol;
  char *currency_symbol;	/* Symbole monetaire local.     */
  char *mon_decimal_point;	/* Caractere separateur decimal */
  char *mon_thousands_sep;	/* Caract. separateur milliers  */
  char *mon_grouping;		/* Comme 'grouping' (ci-dessus) */
  char *positive_sign;		/* Signe pour valeurs positives */
  char *negative_sign;		/* Signe pour valeurs negatives */
  char int_frac_digits;		/* Int'l fractional digits.     */
  char frac_digits;		/* Local fractional digits.     */
  /* 1 : le symbole monetaire precede les valeurs positives,    */
  /* 0 : le symbole monetaire suit les valeurs positives.       */
  char p_cs_precedes;
  /* 1 si un espace separe le symbole monetaire d'une valeur +  */
  char p_sep_by_space;
  /* 1 : le symbole monetaire precede les valeurs negatives,    */
  /* 0 : le symbole monetaire suit les valeurs negatives.       */
  char n_cs_precedes;
  /* 1 si un espace separe le symbole monetaire d'une valeur -  */
  char n_sep_by_space;
  /* Positions des signes plus et moins :
   * 0 Parentheses autour de la valeur et du symbole monetaire.
   * 1 Le signe precede la valeur et le symbole monetaire.
   * 2 Le signe suit la valeur et le symbole monetaire.
   * 3 Le signe precede immediatement le symbole monetaire.
   * 4 Le signe suit immediatement le symbole monetaire.
   */
  char p_sign_posn;
  char n_sign_posn;
};

CONFORME A
POSIX.1

VOIR AUSI
setlocale(3), localeconv(3), locale(1), localedef(1), rpmatch(3), strfmon(3), strcoll(3), strxfrm(3), strftime(3)