Bibliothèque standard C -<locale.h>

Introduction

<locale.h>Il s'agit d'un fichier d'en-tête de la bibliothèque standard C, utilisé pour prendre en charge l'internationalisation et la localisation des programmes. Il fournit un ensemble de fonctions et de macros pour définir ou interroger les informations de localisation du programme, telles que les dates, les heures, la devise, les formats de nombres, etc.

Ensuite, nous allons présenter quelques macros, ainsi qu'une structure importante.struct lconvet deux fonctions importantes.

Macros de bibliothèque

Les macros définies dans le fichier d'en-tête locale.h sont listées ci-dessous ; ces macros seront utilisées dans les deux fonctions listées ci-dessous :

Numéro de sérieMacros & Description
1 LC_ALL
Utilisé pour définir ou interroger toutes les catégories de localisation.
2 LC_COLLATE
Utilisé pour définir ou interroger les informations de localisation pour la comparaison de chaînes.
3 LC_CTYPE
Utilisé pour définir ou interroger les informations de localisation pour le traitement des caractères.
4 LC_MONETARY
Utilisé pour définir ou interroger les informations de localisation pour le format monétaire.
5 LC_NUMERIC
Utilisé pour définir ou interroger les informations de localisation pour le format numérique (par exemple, le symbole de point décimal).
6 LC_TIME
Utilisé pour définir ou interroger des informations de localisation pour le format de l'heure.
7 locale_t
Types qui représentent des informations de localisation.

Fonctions de bibliothèque

Les fonctions définies dans le fichier d'en-tête locale.h sont listées ci-dessous :

Numéro de sérieFonctions et description
1char *setlocale(int category, const char *locale)
Définit ou lit des informations de localisation.
2struct lconv *localeconv(void)
Définit ou lit des informations de localisation.
3locale_t newlocale(int category_mask, const char *locale, locale_t base)
Crée un nouvel objet de localisation.
4freelocale(locale_t locale)
Libère un objet de localisation.
5locale_t uselocale(locale_t newloc)
Définit ou interroge l'objet de localisation du thread.

Exemple

Définition et interrogation des informations de localisation :

Exemple

#include <stdio.h>
#include <locale.h>

int main() {
    // Définir les informations de locale sur les paramètres par défaut à partir des variables d'environnement de l'utilisateur
    setlocale(LC_ALL, "");

    // Obtenir et afficher les informations sur la locale actuelle
    printf("Locale actuelle pour LC_ALL : %s\n", setlocale(LC_ALL, NULL));
    printf("Locale actuelle pour LC_TIME : %s\n", setlocale(LC_TIME, NULL));
    printf("Locale actuelle pour LC_NUMERIC : %s\n", setlocale(LC_NUMERIC, NULL));

    return 0;
}

La sortie de compilation est :

Current locale for LC_ALL: zh_CN.UTF-8
Current locale for LC_TIME: zh_CN.UTF-8
Current locale for LC_NUMERIC: zh_CN.UTF-8

Obtention des informations sur le format numérique et monétaire :

Exemple

#include <stdio.h>
#include <locale.h>

int main() {
    // Définir les informations de locale sur les paramètres par défaut à partir des variables d'environnement de l'utilisateur
    setlocale(LC_ALL, "");

    // Obtenir les informations de formatage numérique et monétaire localisées
    struct lconv *lc = localeconv();

    // Afficher les informations de formatage numérique et monétaire
    printf("Caractère de point décimal : %s\n", lc->decimal_point);
    printf("Séparateur de milliers : %s\n", lc->thousands_sep);
    printf("Symbole monétaire : %s\n", lc->currency_symbol);

    return 0;
}

La sortie de compilation est :

Decimal point character: .
Thousands separator: ,
Currency symbol: ¥

Utilisation d'un objet de localisation personnalisé :

Exemple

#include <stdio.h>
#include <locale.h>
#include <xlocale.h>

int main() {
    // Créer un nouvel objet de locale, en utilisant le paramètre de locale "en_US.UTF-8"
    locale_t newloc = newlocale(LC_ALL_MASK, "en_US.UTF-8", (locale_t)0);

    // Définir l'objet de locale du thread courant sur le nouvel objet de locale
    locale_t oldloc = uselocale(newloc);

    // Obtenir et afficher les informations de localisation du thread actuel
    printf("Locale actuelle pour LC_NUMERIC : %s\n", setlocale(LC_NUMERIC, NULL));

    // Libérer le nouvel objet de locale
    uselocale(oldloc);
    freelocale(newloc);

    return 0;
}

La sortie de compilation est :

Current locale for LC_NUMERIC: C

Structure de la bibliothèque

typedef struct {
   char *decimal_point;
   char *thousands_sep;
   char *grouping;    
   char *int_curr_symbol;
   char *currency_symbol;
   char *mon_decimal_point;
   char *mon_thousands_sep;
   char *mon_grouping;
   char *positive_sign;
   char *negative_sign;
   char int_frac_digits;
   char frac_digits;
   char p_cs_precedes;
   char p_sep_by_space;
   char n_cs_precedes;
   char n_sep_by_space;
   char p_sign_posn;
   char n_sign_posn;
} lconv

Ce qui suit est une description de chaque champ :

Numéro de sérieChamps & Description
1 decimal_point
Le caractère de point décimal utilisé pour les valeurs non monétaires.
2 thousands_sep
Le séparateur de milliers utilisé pour les valeurs non monétaires.
3 grouping
Une chaîne représentant la taille de chaque groupe de chiffres dans les quantités non monétaires. Chaque caractère représente une valeur entière, et chaque entier spécifie le nombre de chiffres dans le groupe actuel. Une valeur de 0 signifie que la valeur précédente s'appliquera aux groupes restants.
4 int_curr_symbol
La chaîne utilisée pour le symbole monétaire international. Les trois premiers caractères sont spécifiés par ISO 4217:1987, et le quatrième caractère est utilisé pour séparer le symbole monétaire du montant monétaire.
5 currency_symbol
Le symbole local utilisé pour la devise.
6 mon_decimal_point
Le caractère de point décimal utilisé pour les valeurs monétaires.
7 mon_thousands_sep
Le séparateur de milliers utilisé pour les valeurs monétaires.
8 mon_grouping
Une chaîne représentant la taille de chaque groupe de chiffres dans les valeurs monétaires. Chaque caractère représente une valeur entière, et chaque entier spécifie le nombre de chiffres dans le groupe actuel. Une valeur de 0 signifie que la valeur précédente s'appliquera aux groupes restants.
9 positive_sign
Le caractère utilisé pour les valeurs monétaires positives.
10 negative_sign
Le caractère utilisé pour les valeurs monétaires négatives.
11 int_frac_digits
Le nombre de chiffres à afficher après le séparateur décimal dans les valeurs monétaires internationales.
12 frac_digits
Le nombre de chiffres à afficher après le séparateur décimal dans les valeurs monétaires.
13 p_cs_precedes
Si égal à 1, currency_symbol apparaît avant la valeur monétaire positive. Si égal à 0, currency_symbol apparaît après la valeur monétaire positive.
14 p_sep_by_space
Si égal à 1, un espace est utilisé pour séparer currency_symbol et la valeur monétaire positive. Si égal à 0, aucun espace n'est utilisé entre currency_symbol et la valeur monétaire positive.
15 n_cs_precedes
Si égal à 1, currency_symbol apparaît avant la valeur monétaire négative. Si égal à 0, currency_symbol apparaît après la valeur monétaire négative.
16 n_sep_by_space
Si égal à 1, un espace est utilisé pour séparer currency_symbol et la valeur monétaire négative. Si égal à 0, aucun espace n'est utilisé entre currency_symbol et la valeur monétaire négative.
17 p_sign_posn
Indique la position du signe positif dans les valeurs monétaires positives.
18 n_sign_posn
Indique la position du signe négatif dans les valeurs monétaires négatives.

Les valeurs suivantes sont utilisées pourp_sign_posnetn_sign_posn:

ValeurDescription
0 Les parenthèses entourant la valeur et currency_symbol.
1 Le symbole placé avant la valeur et currency_symbol.
2 Le symbole placé après la valeur et currency_symbol.
3 Le symbole placé immédiatement avant la valeur et currency_symbol.
4 Le symbole placé immédiatement après la valeur et currency_symbol.
autres extensions