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érie | Macros & 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érie | Fonctions et description |
|---|---|
| 1 | char *setlocale(int category, const char *locale) Définit ou lit des informations de localisation. |
| 2 | struct lconv *localeconv(void) Définit ou lit des informations de localisation. |
| 3 | locale_t newlocale(int category_mask, const char *locale, locale_t base) Crée un nouvel objet de localisation. |
| 4 | freelocale(locale_t locale) Libère un objet de localisation. |
| 5 | locale_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 <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 <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 <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érie | Champs & 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:
| Valeur | Description |
|---|---|
| 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. |