locale
— Services d'internationalisation¶
Source code: Lib/locale.py
Le module locale
donne accès à la base de données et aux fonctionnalités des paramètres linguistiques définis par POSIX. Le mécanisme des paramètres linguistiques de POSIX permet aux développeurs de faire face à certaines problématiques culturelles dans une application, sans avoir à connaître toutes les spécificités de chaque pays où le logiciel est exécuté.
Le module locale
est implémenté au-dessus du module _locale
, qui lui-même utilise l'implémentation du paramètre régional ANSI C si disponible.
Le module locale
définit l'exception et les fonctions suivantes :
-
exception
locale.
Error
¶ Exception levée lorsque le paramètre régional passé en paramètre de
setlocale()
n'est pas reconnu.
-
locale.
setlocale
(category, locale=None)¶ Si locale ne vaut pas
None
,setlocale()
modifie le paramètre régional pour la catégorie category. Les catégories disponibles sont listées dans la description des données ci-dessous. locale peut être une chaîne de caractères ou un itérable de deux chaînes de caractères (code de la langue et encodage). Si c'est un itérable, il est converti en un nom de paramètre régional à l'aide du moteur de normalisation fait pour. Si c'est une chaîne vide, les paramètres par défaut de l'utilisateur sont utilisés. Si la modification du paramètre régional échoue, l'exceptionError
est levée. Si elle fonctionne, le nouveau paramètre est renvoyé.Si locale est omis ou vaut
None
, le paramètre actuel de category est renvoyé.setlocale()
n'est pas thread-safe sur la plupart des systèmes. Les applications commencent généralement par un appel de :import locale locale.setlocale(locale.LC_ALL, '')
Cela définit les paramètres régionaux dans toutes les catégories sur ceux par défaut de l'utilisateur (habituellement spécifiés dans la variable d'environnement
LANG
). Si les paramètres régionaux ne sont pas modifiés par la suite, l'utilisation de fils d'exécution ne devrait pas poser de problèmes.
-
locale.
localeconv
()¶ Renvoie la base de données des conventions locales sous forme de dictionnaire. Ce dictionnaire a les chaînes de caractères suivantes comme clés :
Catégorie
Clé
Signification
'decimal_point'
Caractère du séparateur décimal (entre la partie entière et la partie décimale).
'grouping'
Séquence de nombres spécifiant les positions relatives attendues pour
'thousands_sep'
(séparateur de milliers). Si la séquence se termine parCHAR_MAX
, aucun autre regroupement n'est effectué. Si la séquence se termine par un0
, la dernière taille du groupe est utilisée à plusieurs reprises.'thousands_sep'
Caractère utilisé entre les groupes (séparateur de milliers).
'int_curr_symbol'
Symbole monétaire international.
'currency_symbol'
Symbole monétaire local.
'p_cs_precedes/n_cs_precedes'
Si le symbole monétaire précède ou non la valeur (pour les valeurs positives et négatives, respectivement).
'p_sep_by_space/n_sep_by_space'
Si le symbole monétaire est séparé de la valeur par une espace ou non (pour les valeurs positives et négatives, respectivement).
'mon_decimal_point'
Séparateur décimal (entre la partie entière et la partie décimale) utilisé pour les valeurs monétaires.
'frac_digits'
Nombre de décimales utilisées dans le format local des valeurs monétaires.
'int_frac_digits'
Nombre de décimales utilisées dans le format international des valeurs monétaires.
'mon_thousands_sep'
Séparateur de groupe utilisé pour les valeurs monétaires.
'mon_grouping'
Équivalent de
'grouping'
, utilisé pour les valeurs monétaires.'positive_sign'
Symbole utilisé pour indiquer qu'une valeur monétaire est positive.
'negative_sign'
Symbole utilisé pour indiquer qu'une valeur monétaire est négative.
'p_sign_posn/n_sign_posn'
Position du signe (pour les valeurs positives et négatives, respectivement), voir ci-dessous.
Toutes les valeurs numériques peuvent être définies à
CHAR_MAX
pour indiquer qu'il n'y a pas de valeur spécifiée pour ces paramètres régionaux.Les valeurs possibles pour
'p_sign_posn'
et'n_sign_posn'
sont données ci-dessous.Valeur
Explication
0
Le symbole monétaire et la valeur sont entourés de parenthèses.
1
Le signe doit précéder la valeur et le symbole monétaire.
2
Le signe doit suivre la valeur et le symbole monétaire.
3
Le signe doit précéder immédiatement la valeur.
4
Le signe doit suivre immédiatement la valeur.
CHAR_MAX
Rien n'est spécifié dans ces paramètres régionaux.
The function sets temporarily the
LC_CTYPE
locale to theLC_NUMERIC
locale or theLC_MONETARY
locale if locales are different and numeric or monetary strings are non-ASCII. This temporary change affects other threads.Modifié dans la version 3.7: La fonction définit maintenant la valeur du paramètre
LC_CTYPE
à celle du paramètreLC_NUMERIC
temporairement dans certains cas.
-
locale.
nl_langinfo
(option)¶ Renvoie quelques informations spécifiques aux paramètres régionaux sous forme de chaîne. Cette fonction n'est pas disponible sur tous les systèmes et l'ensemble des options possibles peut également varier d'une plateforme à l'autre. Les valeurs possibles pour les arguments sont des nombres, pour lesquels des constantes symboliques sont disponibles dans le module locale.
La fonction
nl_langinfo()
accepte l'une des clés suivantes. La plupart des descriptions sont extraites des descriptions correspondantes dans la bibliothèque GNU C.-
locale.
CODESET
¶ Récupère une chaîne avec le nom de l'encodage des caractères utilisé par le paramètre régional sélectionné.
-
locale.
D_T_FMT
¶ Récupère une chaîne qui peut être utilisée comme une chaîne de format par
time.strftime()
afin de représenter la date et l'heure pour un paramètre régional spécifique.
-
locale.
D_FMT
¶ Récupère une chaîne qui peut être utilisée comme une chaîne de format par
time.strftime()
afin de représenter une date pour un paramètre régional spécifique.
-
locale.
T_FMT
¶ Récupère une chaîne qui peut être utilisée comme une chaîne de format par
time.strftime()
afin de représenter une heure pour un paramètre régional spécifique.
-
locale.
T_FMT_AMPM
¶ Récupère une chaîne de format pour
time.strftime()
afin de représenter l'heure au format am / pm.
-
DAY_1 ... DAY_7
Récupère le nom du n-ième jour de la semaine.
Note
Cela suit la convention américaine qui définit
DAY_1
comme étant dimanche, et non la convention internationale (ISO 8601) où lundi est le premier jour de la semaine.
-
ABDAY_1 ... ABDAY_7
Récupère l'abréviation du n-ième jour de la semaine.
-
MON_1 ... MON_12
Récupère le nom du n-ième mois.
-
ABMON_1 ... ABMON_12
Récupère l'abréviation du n-ième mois.
-
locale.
RADIXCHAR
¶ Récupère le caractère de séparation radix (point décimal, virgule décimale, etc.).
-
locale.
THOUSEP
¶ Récupère le caractère de séparation des milliers (groupes de 3 chiffres).
-
locale.
YESEXPR
¶ Récupère une expression régulière qui peut être utilisée par la fonction regex pour reconnaître une réponse positive à une question fermée (oui / non).
Note
L'expression est dans une syntaxe adaptée à la fonction
regex()
de la bibliothèque C, qui peut différer de la syntaxe utilisée parre
.
-
locale.
NOEXPR
¶ Récupère une expression régulière qui peut être utilisée par la fonction regex(3) pour reconnaître une réponse négative à une question fermée (oui / non).
-
locale.
CRNCYSTR
¶ Récupère le symbole monétaire, précédé de « - » si le symbole doit apparaître avant la valeur, « + » s'il doit apparaître après la valeur, ou « . » s'il doit remplacer le caractère de séparation radix.
-
locale.
ERA
¶ Récupère une chaîne qui représente l'ère utilisée pour le paramètre régional actuel.
La plupart des paramètres régionaux ne définissent pas cette valeur. Un exemple de région qui définit bien cette valeur est le japonais. Au Japon, la représentation traditionnelle des dates comprend le nom de l'ère correspondant au règne de l'empereur de l'époque.
Normalement, il ne devrait pas être nécessaire d'utiliser cette valeur directement. Spécifier le modificateur
E
dans leurs chaînes de format provoque l'utilisation de cette information par la fonctiontime.strftime()
. Le format de la chaîne renvoyée n'est pas spécifié, et vous ne devez donc pas supposer en avoir connaissance sur des systèmes différents.
-
locale.
ERA_D_T_FMT
¶ Récupère la chaîne de format pour
time.strftime()
afin de représenter la date et l'heure pour un paramètre régional spécifique basée sur une ère.
-
locale.
ERA_D_FMT
¶ Récupère la chaîne de format pour
time.strftime()
afin de représenter une date pour un paramètre régional spécifique basée sur une ère.
-
locale.
ERA_T_FMT
¶ Récupère la chaîne de format pour
time.strftime()
afin de représenter une heure pour un paramètre régional spécifique basée sur une ère.
-
locale.
ALT_DIGITS
¶ Récupère une représentation de 100 valeurs maximum utilisées pour représenter les valeurs de 0 à 99.
-
-
locale.
getdefaultlocale
([envvars])¶ Tente de déterminer les paramètres régionaux par défaut, puis les renvoie sous la forme d'un n-uplet
(code de la langue, encodage)
.D'après POSIX, un programme qui n'a pas appelé
setlocale(LC_ALL, '')
fonctionne en utilisant le paramètre régional portable'C'
. Appelersetlocale(LC_ALL, '')
lui permet d'utiliser les paramètres régionaux par défaut définis par la variableLANG
. Comme nous ne voulons pas interférer avec les paramètres régionaux actuels, nous émulons donc le comportement décrit ci-dessus.Afin de maintenir la compatibilité avec d'autres plateformes, non seulement la variable
LANG
est testée, mais c'est aussi le cas pour toute une liste de variables passés en paramètre via envvars. La première variable à être définie sera utilisée. envvars utilise par défaut le chemin de recherche utilisé dans GNU gettext ; il doit toujours contenir le nom de variable'LANG'
. Le chemin de recherche de GNU gettext contient'LC_ALL'
,'LC_CTYPE'
,'LANG'
et'LANGUAGE'
, dans cet ordre.À l'exception du code
'C'
, le code d'une langue correspond à la RFC 1766. Le code de la langue et l'encodage peuvent valoirNone
si leur valeur ne peut être déterminée.
-
locale.
getlocale
(category=LC_CTYPE)¶ Renvoie les réglages actuels pour la catégorie de paramètres régionaux donnée, sous la forme d'une séquence contenant le code de la langue et l'encodage. La catégorie category peut être l'une des valeurs
LC_*
à l'exception deLC_ALL
. La valeur par défaut estLC_CTYPE
.À l'exception du code
'C'
, le code d'une langue correspond à la RFC 1766. Le code de la langue et l'encodage peuvent valoirNone
si leur valeur ne peut être déterminée.
-
locale.
getpreferredencoding
(do_setlocale=True)¶ Renvoie le codage utilisé pour les données textuelles, selon les préférences de l'utilisateur. Les préférences de l'utilisateur sont exprimées différemment selon les systèmes et peuvent ne pas être disponibles via les interfaces de programmation sur certains systèmes. Cette fonction ne renvoie donc qu'une supposition.
Sur certains systèmes, il est nécessaire d'invoquer
setlocale()
pour obtenir les préférences de l'utilisateur, cette fonction n'est donc pas utilisable sans protection dans les programmes à fils d'exécutions multiples. Si l'appel de setlocale n'est pas nécessaire ou souhaité, do_setlocale doit être réglé àFalse
.Sur Android ou dans le mode UTF-8 (avec l'option
-X
utf8
), renvoie toujours'UTF-8'
, la locale et l'argument do_setlocale sont ignorés.Modifié dans la version 3.7: La fonction renvoie maintenant toujours
UTF-8
sur Android ou si le mode UTF-8 est activé.
-
locale.
normalize
(localename)¶ Renvoie un code normalisé pour le nom du paramètre régional fourni. Ce code renvoyé est structuré de façon à être utilisé avec
setlocale()
. Si la normalisation échoue, le nom d'origine est renvoyé inchangé.Si l'encodage donné n'est pas connu, la fonction utilise l'encodage par défaut pour le code du paramètre régional, tout comme
setlocale()
.
-
locale.
resetlocale
(category=LC_ALL)¶ Définit le paramètre régional de la catégorie category au réglage par défaut.
Le réglage par défaut est déterminé en appelant
getdefaultlocale()
. La catégorie category vaut par défautLC_ALL
.
-
locale.
strcoll
(string1, string2)¶ Compare deux chaînes en se basant sur le paramètre
LC_COLLATE
actuel. Comme toute autre fonction de comparaison, renvoie une valeur négative, positive, ou0
, selon si string1 est lexicographiquement inférieure, supérieure, ou égale à string2.
-
locale.
strxfrm
(string)¶ Transforme une chaîne de caractères en une chaîne qui peut être utilisée dans les comparaisons sensibles aux paramètres régionaux. Par exemple,
strxfrm(s1) < strxfrm(s2)
est équivalent àstrcoll(s1, s2) < 0
. Cette fonction peut être utilisée lorsque la même chaîne est comparée de façon répétitive, par exemple lors de l'assemblage d'une séquence de chaînes.
-
locale.
format_string
(format, val, grouping=False, monetary=False)¶ Structure un nombre val en fonction du paramètre
LC_NUMERIC
actuel. Le format suit les conventions de l'opérateur%
. Pour les valeurs à virgule flottante, le point décimal est modifié si nécessaire. Si grouping est vrai, le regroupement est également pris en compte.Si monetary est vrai, la conversion utilise un séparateur des milliers monétaire et des chaînes de regroupement.
Traite les marqueurs de structure en
format % val
, mais en prenant en compte les paramètres régionaux actuels.Modifié dans la version 3.7: The monetary keyword parameter was added.
-
locale.
format
(format, val, grouping=False, monetary=False)¶ Please note that this function works like
format_string()
but will only work for exactly one%char
specifier. For example,'%f'
and'%.0f'
are both valid specifiers, but'%f KiB'
is not.For whole format strings, use
format_string()
.Obsolète depuis la version 3.7: Use
format_string()
instead.
-
locale.
currency
(val, symbol=True, grouping=False, international=False)¶ Structure un nombre val en fonction du paramètre
LC_MONETARY
actuel.La chaîne renvoyée inclut le symbole monétaire si symbol est vrai, ce qui est le cas par défaut. Si grouping est vrai (ce qui n'est pas le cas par défaut), un regroupement est effectué avec la valeur. Si international est vrai (ce qui n'est pas le cas par défaut), le symbole de la devise internationale est utilisé.
Notez que cette fonction ne fonctionnera pas avec le paramètre régional 'C', vous devez donc d'abord en définir un via
setlocale()
.
-
locale.
str
(float)¶ Structure un nombre flottant en utilisant le même format que la fonction native
str(float)
, mais en prenant en compte le point décimal.
-
locale.
delocalize
(string)¶ Convertit une chaîne de caractères en une chaîne de nombres normalisés, en suivant les réglages
LC_NUMERIC
.Nouveau dans la version 3.5.
-
locale.
atof
(string, func=float)¶ Converts a string to a number, following the
LC_NUMERIC
settings, by calling func on the result of callingdelocalize()
on string.
-
locale.
atoi
(string)¶ Convertit une chaîne de caractères en un entier, en suivant les réglages
LC_NUMERIC
.
-
locale.
LC_CTYPE
¶ Catégorie de paramètre régional pour les fonctions de type caractère. Suivant les réglages de la catégorie, les fonctions du module
string
gérant la casse peuvent changer leur comportement.
-
locale.
LC_COLLATE
¶ Catégorie de paramètre régional pour les tris de chaînes de caractères. Les fonctions
strcoll()
etstrxfrm()
du modulelocale
sont concernées.
-
locale.
LC_TIME
¶ Catégorie de paramètre régional pour la mise en forme de la date et de l'heure. La fonction
time.strftime()
suit ces conventions.
-
locale.
LC_MONETARY
¶ Catégorie de paramètre régional pour la mise en forme des valeurs monétaires. Les options disponibles sont accessibles à partir de la fonction
localeconv()
.
-
locale.
LC_MESSAGES
¶ Catégorie de paramètre régional pour l'affichage de messages. Actuellement, Python ne gère pas les messages spécifiques aux applications qui sont sensibles aux paramètres régionaux. Les messages affichés par le système d'exploitation, comme ceux renvoyés par
os.strerror()
peuvent être affectés par cette catégorie.
-
locale.
LC_NUMERIC
¶ Catégorie de paramètre régional pour la mise en forme des nombres. Les fonctions
format()
,atoi()
,atof()
etstr()
du modulelocale
sont affectées par cette catégorie. Toutes les autres opérations de mise en forme des nombres ne sont pas affectées.
-
locale.
LC_ALL
¶ Combinaison de tous les paramètres régionaux. Si cette option est utilisée lors du changement de paramètres régionaux, la définition de ces paramètres pour toutes les catégories est tentée. Si cela échoue pour n'importe quelle catégorie, aucune d'entre elles n'est modifiée. Lorsque les paramètres régionaux sont récupérés à l'aide de cette option, une chaîne de caractères indiquant le réglage pour toutes les catégories est renvoyée. Cette chaîne peut alors être utilisée plus tard pour restaurer les paramètres d'origine.
-
locale.
CHAR_MAX
¶ Ceci est une constante symbolique utilisée pour différentes valeurs renvoyées par
localeconv()
.
Exemple :
>>> import locale
>>> loc = locale.getlocale() # get current locale
# use German locale; name might vary with platform
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
>>> locale.strcoll('f\xe4n', 'foo') # compare a string containing an umlaut
>>> locale.setlocale(locale.LC_ALL, '') # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, 'C') # use default (C) locale
>>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale
Contexte, détails, conseils, astuces et mises en garde¶
La norme C définie les paramètres régionaux comme une propriété à l'échelle d'un programme, qui peut être relativement coûteuse à changer. En plus de cela, certaines implémentations ne fonctionnent pas car des changements fréquents de paramètres régionaux peuvent causer des core dumps. Cela rend l'utilisation correcte de ces paramètres quelque peu pénible.
Initialement, lorsqu'un programme est démarré, les paramètres régionaux C
sont utilisés, peu importe les réglages de l'utilisateur. Il y a toutefois une exception : la catégorie LC_CTYPE
est modifiée au démarrage pour définir l'encodage des paramètres régionaux actuels comme celui défini par l'utilisateur. Le programme doit explicitement dire qu'il veut utiliser les réglages de l'utilisateur pour les autres catégories, en appelant setlocale(LC_ALL, '')
.
C'est généralement une mauvaise idée d'appeler setlocale()
dans une routine de bibliothèque car cela a pour effet secondaire d'affecter le programme entier. Sauvegarder et restaurer les paramètres est presque aussi mauvais : c'est coûteux et cela affecte d'autres fils d'exécutions qui s'exécutent avant que les paramètres n'aient été restaurés.
Si, lors du développement d'un module à usage général, vous avez besoin d'une version indépendante des paramètres régionaux pour une opération y étant sensible (comme c'est le cas pour certains formats utilisés avec time.strftime()
), vous devez trouver un moyen de le faire sans utiliser la routine de la bibliothèque standard. Le mieux est encore de se convaincre que l'usage des paramètres régionaux est une bonne chose. Ce n'est qu'en dernier recours que vous devez documenter que votre module n'est pas compatible avec les réglages du paramètre régional C
.
La seule façon d'effectuer des opérations numériques conformément aux paramètres régionaux est d'utiliser les fonctions spéciales définies par ce module : atof()
, atoi()
, format()
, str()
.
Il n'y a aucun moyen d'effectuer des conversions de casse et des classifications de caractères en fonction des paramètres régionaux. Pour les chaînes de caractères (Unicode), celles-ci se font uniquement en fonction de la valeur du caractère, tandis que pour les chaînes d'octets, les conversions et les classifications se font en fonction de la valeur ASCII de l'octet, et les octets dont le bit de poids fort est à 1 (c'est-à-dire les octets non ASCII) ne sont jamais convertis ou considérés comme faisant partie d'une classe de caractères comme une lettre ou une espace.
Pour les auteurs d'extensions et les programmes qui intègrent Python¶
Les modules d'extensions ne devraient jamais appeler setlocale()
, sauf pour connaître le paramètre régional actuel. Mais comme la valeur renvoyée ne peut être utilisée que pour le restaurer, ce n'est pas très utile (sauf peut-être pour savoir si le paramètre régional est défini à C
ou non).
Lorsque le code Python utilise le module locale
pour changer le paramètre régional, cela affecte également l'application intégrée. Si l'application intégrée ne souhaite pas que cela se produise, elle doit supprimer le module d'extension _locale
(qui fait tout le travail) de la table des modules natifs se trouvant dans le fichier config.c
, et s'assurer que le module _locale
n'est pas accessible en tant que bibliothèque partagée.
Accéder aux catalogues de messages¶
-
locale.
gettext
(msg)¶
-
locale.
dgettext
(domain, msg)¶
-
locale.
dcgettext
(domain, msg, category)¶
-
locale.
textdomain
(domain)¶
-
locale.
bindtextdomain
(domain, dir)¶
Le module locale expose l'interface gettext de la bibliothèque C sur les systèmes qui fournissent cette interface. Il se compose des fonctions gettext()
, dgettext()
, dcgettext()
, textdomain()
, bindtextdomain()
et bind_textdomain_codeset()
. Elles sont similaires aux fonctions du module gettext
, mais utilisent le format binaire de la bibliothèque C pour les catalogues de messages.
Les applications Python ne devraient normalement pas avoir besoin de faire appel à ces fonctions, mais devraient plutôt utiliser gettext
. Une exception connue pour cette règle concerne les applications qui sont liées avec des bibliothèques C supplémentaires faisant appel à gettext()
ou dcgettext()
. Pour ces applications, il peut être nécessaire de lier le domaine du texte, afin que les bibliothèques puissent régionaliser correctement leurs catalogues de messages.