Les paramètres régionaux (ou
locale,
en anglais) constituent 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 les paramètres de
l'utilisateur 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(3)
pour définir ces paramètres et
localeconv(3)
pour obtenir des informations sur la mise en forme des nombres.
Il existe différentes catégories de paramètres régionaux 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(3),
il devient possible de fixer l'une de ces informations :
-
- LC_COLLATE
-
est utilisée pour modifier le comportement des fonctions
strcoll(3)
et
strxfrm(3),
qui permettent les comparaisons de chaînes dans l'alphabet local.
Par exemple, le double-s allemand est ordonné comme « ss ».
-
- LC_CTYPE
-
permet de modifier le comportement des fonctions de manipulation et
classification de caractères, telles que
isupper(3)
et
toupper(3),
et celui des fonctions travaillant sur des caractères multioctets
comme
mblen(3)
ou
wctomb(33).
-
- LC_MONETARY
-
modifie les informations renvoyées par
localeconv(3)
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 la fonction
strfmon(3).
-
- LC_MESSAGES
-
configure la langue utilisée pour afficher les messages, et la saisie de
réponses affirmatives ou négatives.
La glibc contient les fonctions
gettext(3),
ngettext(3),
et
rpmatch(3)
pour aider à utiliser ces données.
Les fonctions de la famille GNU gettext obéissent aussi à la variable
d'environnement
LANGUAGE.
-
- LC_NUMERIC
-
modifie les informations utilisées par les fonctions des familles
printf(3)
et
scanf(3),
lorsqu'elles doivent respecter les paramètres régionaux de l'utilisateur.
Ces données peuvent également être obtenues avec la fonction
localeconv(3).
-
- LC_TIME
-
modifie le comportement de la fonction
strftime(3)
pour afficher l'heure dans un format adéquat.
Par exemple, la plupart des pays d'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(3)
est une chaîne de caractères vide,
,
ceci correspond aux paramètres régionaux par défaut, déterminés par les
étapes suivantes :
- 1.
-
Si la variable d'environnement
LC_ALL
n'est pas vide, 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 vide, sa valeur est utilisée pour
la catégorie en question.
- 3.
-
Si la variable d'environnement
LANG
est non vide, 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(3),
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 */
char *grouping; /* Cette chaîne de caractères contient une
liste de nombres, séparés par des
point-virgules. Chaque élément indique le
nombre de chiffres utilisé pour ce groupe.
Les éléments d'indice les plus élevés
correspondent aux groupes 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 répété pour tous les groupes
plus à gauche.
Ndt : c'est pas clair ?
Ben, la V.O. non plus ! ;-) */
/* ----------------- Informations monétaires ---------------- */
char *int_curr_symbol; /* 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 *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. */
char p_cs_precedes; /* 1 si le symbole monétaire précède
les valeurs positives, 0 s'il
les suit */
char p_sep_by_space; /* 1 si un espace sépare le symbole
monétaire d'une valeur + */
char n_cs_precedes; /* 1 si le symbole monétaire précède
les valeurs négatives, 0 s'il
les suit */
char n_sep_by_space; /* 1 si un espace sépare le symbole
monétaire d'une valeur - */
/* 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;
};