locale - Description du support multilingue.
Une localisation est un ensemble de règles linguistiques et culturelles.
Ceci couvre des aspects tels que la langue utilisée pour les messages,
le jeu de caractères, les conventions lexicographiques etc...
Un programme doit être capable de déterminer sa localisation et
d'agir en conséquence pour être portable dans divers environnements
culturels.
Le fichier d'en-tête
<locale.h>
déclare les types de données, les fonctions et les macros utilisés
pour ces tâches.
Les fonctions qu'il déclare sont
setlocale()
pour indiquer la localisation et
localeconv()
pour obtenir des informations sur la mise en forme des nombres.
Il existe différentes catégories d'informations locales qui peuvent
être utiles à un programme. Elles sont déclarées 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 utilisé pour modifier le comportement des fonctions
strcoll()
et
strxfrm(),
qui permettent les comparaisons de chaînes dans l'alphabet local.
Par exemple le double-s allemand, est ordonné comme 'ss'.
- LC_TYPE
-
permet de modifier les manipulations et classifications de caractères,
comme celles des fonctions
isupper()
et
toupper(),
et celles des fonctions travaillant sur des caractères multi-octets
comme
mblen()
ou
wctomb().
- LC_MONETARY
-
modifie les informations renvoyées par
localeconv()
pour décrire la mise en forme habituelle des nombres, en accord avec des
détails comme le point décimal ou la virgule décimale. Ces informations
sont utilisées par les fonctions
strfmon().
- LC_MESSAGES
-
configure la langue utilisée pour afficher les messages, et la saisie de
réponses affirmatives ou négatives. La bibliothèque C GNU contient les
fonctions
gettext(),
ngettext(),
et
rpmatch()
pour aider à utiliser ces données. Les fonctions de la famille Gettext
obéissent aussi à la variable d'environnement
LANGUAGE.
- LC_NUMERIC
-
modifie les informations utilisées par les fonctions des familles
printf()
et
scanf(),
lorsqu'elles doivent utiliser la configuration locale. Ces données
peuvent également être 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 catégories ci-dessus.
Si le second argument de la fonction
setlocale()
est une chaîne de caractères vide,
,
ceci correspond à la localisation par défaut, déterminée avec les
étapes suivantes :
- 1.
-
Si une variable d'environnement
LC_ALL
n'est pas nulle, sa valeur est utilisée.
- 2.
-
Si une variable d'environnement ayant le même nom que les catégories
mentionnées ci-dessus est non nulle, sa valeur est utilisée pour
la catégorie en question.
- 3.
-
Si une variable d'environnement
LANG
est non nulle, sa valeur est utilisée.
Les valeurs concernant la mise en forme numérique sont disponibles
dans une structure
struct lconv,
renvoyée par la fonction
localeconv(),
déclarée ainsi :
struct lconv
{
/* -------- Informations numériques (non-monétaires) ------- */
char *decimal_point; /* Séparateur décimal */
char *thousands_sep; /* Séparateur des milliers */
/*
* Chaque élément indique un nombre de chiffres dans chaque
* groupe.
* Les éléments d'indice les plus élevés correspondent aux grou-
* pes les plus à gauche.
* Un élément de valeur CHAR_MAX signifie l'arrêt du groupement.
* Un élément de valeur 0 signifie que l'élément précédent est
* utilisé pour tous les groupes plus à gauche.
*
* NDT : c'est pas clair ? ben, la V.O. non plus ! ;-)
*/
char *grouping;
/* ----------------- Informations monétaires ---------------- */
/* Les trois premiers caractères correspondent au symbole */
/* monétaire d'après ISO 4217. Le quatrième symbole est le */
/* séparateur, le cinquième est '\0'. */
char *int_curr_symbol;
char *currency_symbol; /* Symbole monétaire local. */
char *mon_decimal_point; /* Caractère séparateur décimal */
char *mon_thousands_sep; /* Caract. séparateur milliers */
char *mon_grouping; /* Comme 'grouping' (ci-dessus) */
char *positive_sign; /* Signe pour valeurs positives */
char *negative_sign; /* Signe pour valeurs négatives */
char int_frac_digits; /* Int'l fractional digits. */
char frac_digits; /* Local fractional digits. */
/* 1 : le symbole monétaire précède les valeurs positives, */
/* 0 : le symbole monétaire suit les valeurs positives. */
char p_cs_precedes;
/* 1 si un espace sépare le symbole monétaire d'une valeur + */
char p_sep_by_space;
/* 1 : le symbole monétaire précède les valeurs négatives, */
/* 0 : le symbole monétaire suit les valeurs négatives. */
char n_cs_precedes;
/* 1 si un espace sépare le symbole monétaire d'une valeur - */
char n_sep_by_space;
/* Positions des signes plus et moins :
* 0 Parenthèses autour de la valeur et du symbole monétaire.
* 1 Le signe précède la valeur et le symbole monétaire.
* 2 Le signe suit la valeur et le symbole monétaire.
* 3 Le signe précède immédiatement le symbole monétaire.
* 4 Le signe suit immédiatement le symbole monétaire.
*/
char p_sign_posn;
char n_sign_posn;
};
Christophe Blaess, 1996-2003.