74 votes

Quelle est la bonne façon de définir les paramètres régionaux de Python?

Je suis d'essayer de trier une liste de chaînes de caractères dans un jeu de paramètres régionaux-conscient. J'ai utilisé la bibliothèque de Babel pour les autres i18n-tâches, mais il ne prend pas en charge le tri. Python locale module fournit une strcoll de la fonction, mais nécessite les paramètres régionaux de la procédure à celui que je veux travailler avec. Une sorte de douleur, mais je peux vivre avec ça.

Le problème est que je n'arrive pas à réellement définir les paramètres régionaux. La documentation pour l' locale module donne cet exemple:

import locale
locale.setlocale(locale.LC_ALL, 'de_DE')

Quand je le lance, j'obtiens ceci:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting

Ce que je fais mal?

99voto

Schnouki Points 2872

Il semble que vous utilisiez Windows. Les chaînes de paramètres régionaux sont différentes ici. Jetez un coup d'oeil plus précis à la doc:

 locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform
 

Sous Windows, je pense que ce serait quelque chose comme:

 locale.setlocale(locale.LC_ALL, 'deu_deu')
 

MSDN a une liste de chaînes de langue et de chaînes de pays / région

12voto

u0b34a0f6ae Points 14874

Vous ne devez pas transmettre de paramètres régionaux explicites à setlocale, cela est faux. Laissez-le découvrir de l'environnement. Vous devez lui passer une chaîne vide

 import locale
locale.setlocale(locale.LC_ALL, '')
 

6voto

linello Points 1789

Sur Ubuntu, vous pouvez avoir ce problème parce que vous n'avez pas de local installé sur votre système.

De shell essayer un:

$> locale -a

et de vérifier si vous trouvez les paramètres régionaux qui vous intéresse. Sinon, vous devez l'installer:

$> sudo apt-get install language-pack-XXX

où XXX est votre langue (dans mon cas "xxx =" italienne locale) Ensuite, exécutez un dpkg-reconfigure:

$> sudo dpkg-reconfigure locales

Après cela, essayez de nouveau dans votre python shell:

>>> import locale
>>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')

(c'est pour l'italien locale, qui était ce dont j'avais besoin)

3voto

À partir de la documentation locale.setlocale:

 locale.setlocale(category, locale=None):
    """
    Set the locale for the given category.  The locale can be
    a string, an iterable of two strings (language code and encoding),
    or None.
    """"
 

Sous Linux (surtout Ubuntu), vous pouvez soit utiliser

 locale.setlocale(locale.LC_ALL, 'de_DE.UFT-8')
 

ou

 locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
 

Vous obtiendrez la même erreur si les paramètres régionaux ne sont pas installés sur le système. Assurez-vous donc que les paramètres régionaux sont installés sur votre système:

 $ locale -a # to list the currently installed locales
$ (sudo) locale-gen de_DE.UTF-8 # to install new locale
 

0voto

backbert Points 38
 def month_name(n):
  import datetime, locale
  locale.setlocale(locale.LC_ALL, '')
  return datetime.datetime.strptime(str(n), "%m").strftime("%B")
 

(testé en python 3 et 2.7.6)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: