newlocale(3) Library Functions Manual newlocale(3) NOM newlocale, freelocale - Creer, modifier et liberer un objet de parametres regionaux BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include locale_t newlocale(int category_mask, const char *locale, locale_t base); void freelocale(locale_t locobj); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : newlocale(), freelocale() : Depuis la glibc 2.10 : _XOPEN_SOURCE >= 700 Avant la glibc 2.10 : _GNU_SOURCE DESCRIPTION La fonction newlocale() cree un nouvel objet de parametres regionaux ou modifie un objet existant, en renvoyant une reference vers le nouvel objet ou l'objet modifie comme resultat de la fonction. L'appel cree un nouvel objet ou modifie un objet existant en fonction de la valeur de base : - si base est (locale_t) 0, un nouvel objet est cree ; - si base indique un objet de parametres regionaux valable existant (c'est-a-dire un objet renvoye par un precedent appel de newlocale() ou duplocale(3)), alors cet objet est modifie par l'appel. Si l'appel reussit, le contenu de base n'est pas garanti (en particulier, l'objet indique par base pourrait etre libere et un nouvel objet cree). Par consequent, l'appelant devrait s'assurer de ne plus utiliser base avant l'appel de newlocale() et devrait ensuite se rapporter a l'objet modifie a l'aide de la reference renvoyee comme resultat de la fonction. Si l'appel echoue, le contenu de base reste valable et sans modification. Si base est l'objet special de parametres regionaux LC_GLOBAL_LOCALE (consultez duplocale(3)), ou n'est pas (locale_t) 0 ni un identifiant d'objet de parametres regionaux valable, le comportement est non defini. L'argument category_mask est un masque binaire indiquant les categories de parametres regionaux a definir dans un objet de parametres regionaux nouvellement cree ou modifie dans un objet existant. Le masque est construit avec un OU binaire des constantes LC_ADDRESS_MASK, LC_CTYPE_MASK, LC_COLLATE_MASK, LC_IDENTIFICATION_MASK, LC_MEASUREMENT_MASK, LC_MESSAGES_MASK, LC_MONETARY_MASK, LC_NUMERIC_MASK, LC_NAME_MASK, LC_PAPER_MASK, LC_TELEPHONE_MASK et LC_TIME_MASK. Alternativement, le masque peut etre defini comme LC_ALL_MASK, ce qui est equivalent a effectuer un OU binaire sur toutes les constantes precedentes. Pour chaque categorie indiquee dans category_mask, les donnees de parametres regionaux de locale seront utilisees dans l'objet renvoye par newlocale(). Si un nouvel objet de parametres regionaux est en cours de creation, les donnees de toutes les categories non indiquees dans category_mask sont prises dans les parametres regionaux par defaut ("POSIX"). Les valeurs predefinies suivantes de locale sont definies pour toutes les categories qui peuvent etre indiquees dans category_mask : "POSIX" Un environnement de parametres regionaux minimal pour les programmes en langage C. "C" Equivalent a "POSIX". "" Un environnement natif defini pour l'implementation correspondant aux valeurs des variables d'environnement LC_* et LANG (consultez locale(7)). freelocale() La fonction freelocale() desalloue les ressources associees a locobj, un objet de parametres regionaux renvoye par un appel a newlocale() ou duplocale(3). Si locobj est LC_GLOBAL_LOCALE ou n'est pas un identifiant d'objet valable de parametres regionaux, le resultat n'est pas defini. Une fois qu'un objet de parametres regionaux a ete libere, le programme ne devrait plus l'utiliser. VALEUR RENVOYEE En cas de reussite, newlocale() renvoie un identifiant qui peut etre utilise dans les appels de duplocale(3), freelocale() et d'autres fonctions qui prennent un argument locale_t. En cas d'erreur, newlocale() renvoie (locale_t) 0 et definit errno pour indiquer l'erreur. ERREURS EINVAL Au moins un bit de category_mask ne correspond pas a une categorie valable de parametres regionaux. EINVAL locale est NULL. ENOENT locale n'est pas un pointeur de chaine vers des parametres regionaux valables. ENOMEM Pas assez de memoire pour creer un objet de parametres regionaux. STANDARDS POSIX.1-2008. HISTORIQUE glibc 2.3. NOTES Chaque objet de parametres regionaux cree par newlocale() devrait etre desalloue en utilisant freelocale(). EXEMPLES Le programme suivant prend jusqu'a deux arguments en ligne de commande, identifiant chacun des parametres regionaux. Le premier argument est necessaire et sert a definir le categorie LC_NUMERIC dans un objet de parametres regionaux cree avec newlocale(). Le second argument est facultatif et sert a definir la categorie LC_TIME de l'objet de parametres regionaux s'il est present. Apres creation et initialisation de l'objet de parametres regionaux, le programme l'applique en utilisant uselocale(3) et teste ensuite l'effet de la modification de parametres regionaux en : (1) affichant un nombre a virgule avec une partie decimale. Cette sortie sera affectee par le reglage LC_NUMERIC. Dans de nombreux parametres regionaux de langues europeennes, le partie decimale du nombre est separee de la partie entiere par une virgule, plutot que par un point ; (2) affichant la date. Le format et la langue de sortie seront affectes par le reglage LC_TIME. Les sessions suivantes d'interpreteur de commandes montrent des exemples d'execution de ce programme. Definir la categorie LC_NUMERIC a fr_FR (francais) : $ ./a.out fr_FR 123456,789 Fri Mar 7 00:25:08 2014 Definir la categorie LC_NUMERIC a fr_FR (francais) et la categorie LC_TIME a it_IT (italien) : $ ./a.out fr_FR it_IT 123456,789 ven 07 mar 2014 00:26:01 CET Indiquer un reglage LC_TIME de chaine vide, ce qui force la valeur a etre prise des reglages de la variable d'environnement (qui est ici indiquee par mi_NZ, maori de Nouvelle-Zelande) : $ LC_ALL=mi_NZ ./a.out fr_FR "" 123456,789 Te Paraire, te 07 o Poutu-te-rangi, 2014 00:38:44 CET Source du programme #define _XOPEN_SOURCE 700 #include #include #include #include #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) int main(int argc, char *argv[]) { char buf[100]; time_t t; size_t s; struct tm *tm; locale_t loc, nloc; if (argc < 2) { fprintf(stderr, "Usage: %s locale1 [locale2]\n", argv[0]); exit(EXIT_FAILURE); } /* Create a new locale object, taking the LC_NUMERIC settings from the locale specified in argv[1]. */ loc = newlocale(LC_NUMERIC_MASK, argv[1], (locale_t) 0); if (loc == (locale_t) 0) errExit("newlocale"); /* If a second command-line argument was specified, modify the locale object to take the LC_TIME settings from the locale specified in argv[2]. We assign the result of this newlocale() call to 'nloc' rather than 'loc', since in some cases, we might want to preserve 'loc' if this call fails. */ if (argc > 2) { nloc = newlocale(LC_TIME_MASK, argv[2], loc); if (nloc == (locale_t) 0) errExit("newlocale"); loc = nloc; } /* Apply the newly created locale to this thread. */ uselocale(loc); /* Test effect of LC_NUMERIC. */ printf("%8.3f\n", 123456.789); /* Test effect of LC_TIME. */ t = time(NULL); tm = localtime(&t); if (tm == NULL) errExit("time"); s = strftime(buf, sizeof(buf), "%c", tm); if (s == 0) errExit("strftime"); printf("%s\n", buf); /* Free the locale object. */ uselocale(LC_GLOBAL_LOCALE); /* So 'loc' is no longer in use */ freelocale(loc); exit(EXIT_SUCCESS); } VOIR AUSSI locale(1), duplocale(3), setlocale(3), uselocale(3), locale(5), locale(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 newlocale(3)