Je tente de sortinger une liste de chaînes en fonction des parameters régionaux. J’ai utilisé la bibliothèque Babel pour d’autres tâches liées à i18n, mais elle ne prend pas en charge le sorting. Le module de locale
de Python fournit une fonction strcoll
, mais requirejs que les parameters régionaux du processus soient définis sur celui que je souhaite utiliser. Une sorte de douleur, mais je peux vivre avec elle.
Le problème est que je n’arrive pas à définir les parameters régionaux. La documentation du module de locale
donne cet exemple:
import locale locale.setlocale(locale.LC_ALL, 'de_DE')
Quand je cours cela, je reçois ceci:
Traceback (most recent call last): File "", line 1, in File "C:\Python26\Lib\locale.py", line 494, in setlocale locale.Error: unsupported locale setting
Qu’est-ce que je fais mal?
Il semble que vous utilisiez Windows. Les chaînes de parameters régionaux sont différentes. Jetez un oeil plus précis à la doc:
locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform
Sur 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
Vous ne devez pas passer de parameters régionaux explicites à setlocale, c’est faux. Laissez-le découvrir de l’environnement. Vous devez lui passer une chaîne vide
import locale locale.setlocale(locale.LC_ALL, '')
C’est le seul moyen de le faire sous Windows (exemple pour l’environnement local allemand):
import locale locale.setlocale(category=locale.LC_ALL, locale="German") # Not locale="de_DE"
Sur Ubuntu, vous pouvez avoir ce problème parce que vous n’avez pas installé ce local sur votre système.
De shell essayez un:
$> locale -a
et vérifiez si vous trouvez la locale 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 = it”, parameters régionaux italiens) Puis lancez dpkg-reconfigure
:
$> sudo dpkg-reconfigure locales
Après cela, essayez à nouveau dans votre shell python:
>>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(c’est pour les locaux italiens, ce dont j’avais besoin)
De locale.setlocale docs:
locale.setlocale(category, locale=None): """ Set the locale for the given category. The locale can be a ssortingng, an iterable of two ssortingngs (language code and encoding), or None. """"
Sous Linux (spécialement Ubuntu), vous pouvez soit utiliser
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
ou
locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
Vous obtiendrez la même erreur si les parameters régionaux ne sont pas installés sur le système. Donc, assurez-vous d’avoir les parameters régionaux 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
Je sais que cela a été demandé il y a des années, mais je pensais essayer d’append ce que j’avais découvert, en utilisant Python 3.6 sur Windows:
import locale for x in locale.windows_locale.values(): print(x.replace('_','-'))
J’en ai essayé et cela semble aussi être un moyen de découvrir ce qui est disponible sur Windows.
Et puis vous définissez simplement les parameters régionaux:
locale.setlocale(locale.LC_ALL, any_item_of_the_printed_ssortingngs)