Hvad er den rigtige måde at indstille Pythons locale på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at sortere en liste over strenge på en lokalbevidst måde. Jeg har brugt Babel-biblioteket til andre i18n-relaterede opgaver, men det understøtter ikke sortering. Python s locale modul giver en strcoll -funktionen, men kræver, at processen er indstillet til den, jeg vil arbejde med. Slags smerte, men jeg kan leve med det.


Problemet er, at jeg tilsyneladende ikke kan sætte lokaliteten. Dokumentationen til modulet locale giver dette eksempel: [21]


import locale
locale.setlocale(locale.LC\_ALL, 'de\_DE')


Når jeg løber det, får jeg det her:


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


Hvad gør jeg forkert?

Bedste reference


Det ser ud til at du bruger Windows. Lokalstrengene er forskellige der. Tag et mere præcist kig på doc:


locale.setlocale(locale.LC\_ALL, 'de\_DE') # use German locale; name might vary with platform


På Windows tror jeg det ville være noget som:


locale.setlocale(locale.LC\_ALL, 'deu\_deu')


MSDN har en liste over sprogstrenger og af land/regionstrenger [22] [23]

Andre referencer 1


Du bør ikke passere en eksplicit lokalitet til setlocale, det er forkert. Lad det finde ud af miljøet. Du skal sende den en tom streng


import locale
locale.setlocale(locale.LC\_ALL, '')

Andre referencer 2


Dette er den eneste måde at gøre det på Windows (eksempel på den tyske lokalitet):


import locale

locale.setlocale(category=locale.LC\_ALL,
                 locale="German")  # Not locale="de\_DE"

Andre referencer 3


Ubuntu



På Ubuntu kan du få dette problem, fordi du ikke har det lokale installeret på dit system.


Fra shell prøv en:


$> locale -a


og kontroller, om du finder den lokal, du er interesseret i. Ellers skal du installere det:


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


hvor XXX er dit sprog (i mit tilfælde 'xxx=det', italiensk lokalitet)
Kør derefter en dpkg-reconfigure:


$> sudo dpkg-reconfigure locales


Efter det skal du prøve igen i din pythonskal:


>>> import locale
>>> locale.setlocale(locale.LC\_ALL,'it\_IT.UTF-8')


(dette er til italiensk locale, hvilket var hvad jeg havde brug for)

Andre referencer 4


Fra locale.setlocale docs:


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.
    """"


Under Linux (især Ubuntu) kan du enten bruge


locale.setlocale(locale.LC\_ALL, 'de\_DE.UTF-8')


eller


locale.setlocale(locale.LC\_ALL, ('de', 'utf-8'))


Du får den samme fejl, hvis localen er ikke installeret på systemet. Så sørg for at du har locale installeret på dit system:


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

Andre referencer 5


Jeg ved, at dette er blevet spurgt for mange år siden, men jeg troede, at jeg ville prøve at tilføje, hvad jeg fandt ud af, ved hjælp af Python 3.6 på Windows:


import locale
for x in locale.windows\_locale.values():
    print(x.replace('\_','-'))


Jeg forsøgte nogle, og det synes også at være en måde at finde ud af, hvad der er tilgængeligt på Windows.


Og så sætter du blot lokaliteten:


locale.setlocale(locale.LC\_ALL, any\_item\_of\_the\_printed\_strings)