Quelle est la manière correcte de définir les parameters régionaux de Python sous Windows?

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" 

Ubuntu

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)