Référence du fichier locale.h


Description détaillée

Dès qu'on veut utiliser un programme en dehors du contexte pour lequel il a été écrit et qu'on ne peut pas imposer aux utilisateurs de s'adapter à celui-ci, il faut adapter le programme, processus appelé localisation. Les usages locaux diffèrent sur un certains nombre de points tel le choix des jeux de caractères (l'ASCII ne permet pas de représenter les lettres accentuées nécessaire à l'écriture du français, sans parler des écritures asiatiques), la manière d'écrire la date (en présence d'une date écrite comme 7/4/1776, un américain croira qu'il s'agit du 4 juillet 1776, un européen pensera plutôt au 7 avril de la même année sauf s'il remarque la nature particulière de cette date) et bien d'autres choses encore. Cet entête contient un certain nombre de déclarations et de définitions permettant aux programmes de s'adapter au contexte dans lequel ils sont exécutés. Quelques fonctions déclarées ailleurs -- ctype.h, stdio.h, stdlib.h et time.h -- dépendent aussi de ce contexte tel que contrôlé par les fonctions de cet entête.

Une locale, c'est un regroupement d'informations de localisation. La norme en définit deux; une qui est active au début du programme et tant qu'on ne l'a pas changé explicitement et qui s'appelle "C", l'autre qui est la locale par défaut du système et qui n'a pas de nom. Une implémentation peut ajouter d'autres locales à ces deux là.

Pour permettre un choix plus fin, la norme subdivise les informations de localisation en catégories. Il y a 5 catégories standards:

Le choix de la locale à utiliser se fait avec setlocale(). Une fois une locale ainsi choisie, une série d'autres fonctions adaptent leur comportement en fonction. Les informations concernant le formattage des quantités monétaires et des autres nombres ne sont que très partiellement prises en compte par les fonctions de la bibliothèque standard, un programme qui veut les utiliser plus complètement doit utiliser le résultat de localeconv() et effectuer le formattage lui-même.

Note:
Les fonctions suivantes ont leur comportement qui dépend de la locale en cours: setlocale(), localeconv(), isalnum(), isalpha(), iscntrl(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), tolower(), toupper(), fprintf(), printf(), sprintf(), fscanf(), scanf(), sscanf(), strtod(), strtol(), strtoul(), strcoll(), strxfrm() et strftime().

L'absence de isdigit() et isxdigit() dans la liste ci-dessus n'est pas une erreur.


Structures de données

struct  lconv
 description des informations de localisation Plus de détails...

Macros

#define NULL
 pointeur nul
#define LC_ALL
 toutes les informations de localisation
#define LC_COLLATE
 informations concernant l'ordre
#define LC_CTYPE
 informations concernant la classification des caractères.
#define LC_MONETARY
 informations concernant la monnaie
#define LC_NUMERIC
 informations concernant l'écriture des nombre
#define LC_TIME
 informations concernant le temps

Fonctions

char * setlocale (int category, const char *locale)
 indique quelles informations de localisation sont à prendre en compte.
struct lconvlocaleconv (void)
 récupère les informations culturelles


Documentation des macros

#define LC_ALL

Comme premier argument de setlocale() indique que toutes les informations de localisation sont à prendre en compte.

#define LC_COLLATE

Comme premier argument de setlocale() indique que les informations de localisation concernant l'ordre des chaînes sont à prendre en compte. C'est ces informations qui permettent à une locale pour le français d'ordonner des chaînes d'abord en ignorant les accents ou à une locale pour l'espagnol de traiter correctement ll et ch.

Ces informations ne sont pas accessibles en dehors des fonctions qui les utilisent: strcoll() et strxfrm().

#define LC_CTYPE

Comme premier argument de setlocale() indique que les informations de localisation concernant la gestion des caractères -- classification et traitement des caractères multibytes -- sont à prendre en compte.

Ces informations ne sont pas accessibles en dehors des fonctions qui les utilisent.

isalnum(), isalpha(), iscntrl(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), tolower(), toupper() sont influencées par la classification.

À faire:
ajouter les fonctions influencées par le traitement des caractères multibytes.
Note:
isdigit() et isxdigit() ne sont pas affectés.

#define LC_MONETARY

Comme premier argument de setlocale() indique que les informations de localisation concernant la monnaie sont à prendre en compte.

Note:
Seule localeconv() utilise ces informations.

#define LC_NUMERIC

Comme premier argument de setlocale() indique que les informations de localisation concernant l'écriture des nombres sont à prendre en compte.

Note:
Seul le séparateur décimal est pris en compte par les fonctions de la bibliothèque standard, les autres aspects de l'écriture des nombres disponibles dans une struct lconv ne sont pas utilisés.

#define LC_TIME

Comme premier argument de setlocale() indique que les informations de localisation concernant la date et l'heure sont à prendre en compte.

Ces informations ne sont pas accessibles en dehors de la fonction qui les utilise: strftime().

#define NULL

Cette macro contient une constante de pointeur nul. Des valeurs populaires sont 0, 0L, (void*)0.

Voir stddef.h pour plus d'informations.


Documentation des fonctions

struct lconv* localeconv ( void   )  [read]

Retourne
un pointeur vers une structure lconv avec les informations culturelles en cours.

Note:
La structure ne peut pas être modifiée par le programme mais un appel ultérieur à localeconv() ou à setlocale() peut la modifier.

char* setlocale ( int  category,
const char *  locale 
)

category indique quels informations culturelles sont à prendre en compte (voir la description des macros LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME; d'autres macros peuvent être définies par l'implémentation).

locale indique quel environnement doit devenir actif. Les valeurs possibles dépendent de l'implémentation, mais les valeurs suivantes doivent être possibles:

  • "C" désigne l'environnement minimal,

  • "" désigne l'environnement natif pour l'implémentation,

  • NULL indique qu'il ne faut pas changer l'environnement, mais simplement retourner une chaîne décrivant la situation actuelle.

Retourne
NULL si la demande ne peut pas être honorée,

une chaîne décrivant la locale en cours après l'appel sinon. Cette chaîne peut être passée à une appel ultérieur à setlocale() avec la même valeur de category pour revenir dans le même environnement.

Note:
La chaîne résultat ne peut pas être modifié par le programme mais un nouvel appel à setlocale() peut changer sa valeur; donc elle doit être copiée si on veut l'utiliser ultérieurement.


Copyright © 2008 -- 2009 Jean-Marc Bourguet Accueil Pages sur le C