web-dev-qa-db-fra.com

Python - les paramètres régionaux par défaut ne fonctionnent pas

Voici la situation:

In [1]: import datetime

In [2]: import locale

In [3]: locale.getlocale()
Out[3]: ('es_ES', 'UTF-8')

In [4]: locale.getdefaultlocale()
Out[4]: ('es_ES', 'UTF-8')

In [5]: datetime.datetime.strftime(datetime.datetime.today(), '%B')
Out[5]: 'July'

Mais le résultat devrait être julio

Si je définis les paramètres régionaux, alors cela fonctionne

In [6]: locale.setlocale(locale.LC_ALL, 'es_ES.UTF8')
Out[6]: 'es_ES.UTF8'

In [7]: datetime.datetime.strftime(datetime.datetime.today(), '%B')
Out[7]: 'julio'

Cela se produit à la fois en Python2 (2.7.10) et en Python3 (3.5.0+)

Les paramètres régionaux du système sont définis sur l'espagnol

LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY=es_ES.UTF-8
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8
LC_ALL=

EDIT:

En voyant la sortie locale, je me suis rendu compte que LC_ALL n'était pas défini. J'ai vérifié /etc/default/locale comme il est suggéré ici et j'ai trouvé un mélange de paramètres régionaux.

LANG="es_ES.UTF-8"
LC_ALL=
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"

Peut-être parce que j'ai mis à jour du 15.04 au 15.10 ?. Quoi qu'il en soit, j'ai rempli LC_ALL et modifié le reste des variables en es_ES, en exécutant à nouveau locale-gen en tant que racine. Cependant, même après le redémarrage du système, la situation est la même.

2
Manuel

Normalement, vous ne devez pas définir LC_ALL de manière persistante en tant que variable d'environnement globale. Si vous le faites sur un poste de travail, vous rendez les interfaces utilisateur graphiques pour la définition des langues/paramètres régionaux inutiles.

En ce qui concerne votre programme Python, vous avez besoin de cette ligne:

locale.setlocale(locale.LC_ALL, '')

Il crée les paramètres régionaux, c’est-à-dire le résultat de la commande locale, dans le programme Python.

1
Gunnar Hjalmarsson