De ce primesc următorul mesaj de eroare atunci când faci acest lucru în python:
>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 531, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
Aceasta funcționează cu alte localizări, cum ar fi fr sau nl, precum și. Am'm folosesc Ubuntu 11.04.
Update: Face următoarele nu a cedat nimic:
dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Executați următoarele comenzi
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Se va rezolva acest lucru.
Asigurați-vă că pentru a se potrivi .UTF-8
parte la real sintaxa găsit în producția de localizare -unexemplu
.utf8` pe unele sisteme.
Tu, probabil, nu au nici de_DE
locale disponibile.
Puteți vizualiza o listă de locații cu `locale-o comandă. De exemplu, pe masina mea:
$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX
Rețineți că, dacă doriți să setați locale pentru a it_IT
trebuie să specificați, de asemenea,.utf8
:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT') # error!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 539, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'
Pentru a instala o nouă locație de utilizare:
sudo apt-get install language-pack-id
în cazul în care " id " este codul de limbă (preluat din aici)
După ați instalat locale ar trebui să urmeze Julien Palard consiliere și reconfigure locales cu:
sudo dpkg-reconfigure locales
Unul din răspunsul de mai sus oferă soluția:
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
problema cu soluția de mai sus este că acesta trebuie să fie făcut pe linux shell. cu toate Acestea, dacă sunteți furnizarea codului dvs. de a lucra pe masina client, atunci aceasta este o abordare greșită. Am încercat, de asemenea, executa comenzile de mai sus, folosind sistemul de operare.sistemul(), dar încă nu't de lucru.
Soluție care a lucrat pentru mine este
locale.setlocale(locale.LC_ALL,'en_US.UTF-8')
Soluția ar fi să umple valori lipsă, în producția afișate prin comanda: "locale"
De ieșire de la "locale" este:
$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
Pentru a Umple valorilor lipsă de editare ~/.bashrc :
$ vim ~/.bashrc
Adăugați următoarele linii după comanda de mai sus (să presupunem că doriți ro.UTF-8 pentru a fi limba dvs.):
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
Dacă acest fișier este ReadOnly tu ar trebui să urmați pașii de mai de GeekyBoy. Răspunsul dat de Dr Beco în Superuser are detalii referitoare la salvarea readonly fișiere.
După salvarea fișierului face:
$ source ~/.bashrc
Acum nu va fi confruntă cu aceeași problemă.
Pentru înregistrare, am avut aceeasi problema, dar niciuna dintre soluțiile de lucrat. Am actualizat computerul meu și au migrat PC-ul meu. Am avut un mixte locale engleză și spaniolă:
$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
Dar, pe noul meu instalare Debian, am selectat limba engleza locale. Care în cele din urmă a lucrat a fost de a reconfigure locales pachet pentru a adăuga și de a genera spaniolă.
$ grep -v "#" /etc/locale.gen
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8
Puneți-l în `Dockerfile mai sus de "MEDIU".
# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.UTF-8
LANG=ro.UTF-8 LIMBA=ro:ro LC_CTYPE=zh_CN.UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
/etc/locale-gen
de fișier. Decomentați la cele utilizatelocale-gen
pentru a genera noi adăugate saleÎn opinia mea, cel mai simplu mod de a seta locale locale în python{,3} este:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'de_DE.UTF-8'
Apoi, locale conștienți de lucrurile funcționează, dacă're pe un decent distro linux, și ar trebui să funcționeze pe binar distribuții de alte sisteme de operare la fel de bine (sau care's un bug IMHO).
>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016
Dacă aș fi fost tu, aș folosi-BABEL: http://babel.pocoo.org/en/latest/index.html
Am si eu aceeasi problema aici, folosind Docker, am'am încercat fiecare pas și am't lucra bine, mereu locale de eroare, așa că am decis să folosesc BABEL, și totul a mers bine.
Ai eroare spune clar, încercați să utilizați locale ceva nu a fost acolo.
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/locale.py", line 581, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
localizare.Eroare: neacceptate setarea locale
Pentru a verifica setarea disponibile, utilizați `locale-un
deb@deb-Latitude-E7470:/ambot$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
astfel încât să puteți utiliza unul dintre,
>>> locale.setlocale(locale.LC_ALL, 'en_AG.utf8')
'en_AG.utf8'
>>>
pentru de_DE`
Acest fișier poate fi reglată manual sau actualizate folosind instrumentul, update-locale.
update-locale LANG=de_DE.UTF-8
În încercarea de a obține python pentru scuipa denumiri specifice în locale am aterizat aici cu aceeasi problema.
În urmărirea răspunsul, lucrurile au luat-o un pic mistic-am găsit.
Am constatat că codul python.
import locale
print locale.getdefaultlocale()
>> ('en_DK', 'UTF-8')
Și într-adevăr locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')
lucrări
Folosind sfaturile de aici am testat în continuare pentru a vedea ce este disponibil folosind codul python
import locale
loc_list = [(a,b) for a,b in locale.locale_alias.items() ]
loc_size = len(loc_list)
print loc_size,'entries'
for loc in loc_list:
try:
locale.setlocale(locale.LC_TIME, loc[1])
print 'SUCCES set {:12} ({})'.format(loc[1],loc[0])
except:
pass
care dă
858 entries
SUCCES set en_US.UTF-8 (univ)
SUCCES set C (c.ascii)
SUCCES set C (c.en)
SUCCES set C (posix-utf2)
SUCCES set C (c)
SUCCES set C (c_c)
SUCCES set C (c_c.c)
SUCCES set en_IE.UTF-8 (en_ie.utf8@euro)
SUCCES set en_US.UTF-8 (universal.utf8@ucs4)
SUCCES set C (posix)
SUCCES set C (english_united-states.437)
SUCCES set en_US.UTF-8 (universal)
Din care doar mai sus este de lucru! Dar en_DK.UTF-8
nu este în această listă, deși nu functioneaza!?!?!? Ce??
Și python generate de listă locale conțin o mulțime de combo-uri de da și DK, care sunt în căutarea pentru, dar din nou nu UTF-8 pentru da/DK...
Sunt la un Punct de distribuție Linux (Debian based), și aici locale
, spune printre alte LC_TIME="en_DK.UTF-8"
, care știu că funcționează, dar nu la locale am nevoie.
locale -o
, spune
C
C.UTF-8
en_DK.utf8
en_US.utf8
POSIX
Deci cu siguranta nevoie de a a instala alte locale, ceea ce am și făcut prin editarea /etc/locale.gen
, decomentați nevoie de linie da_DK.UTF-8 UTF-8
și rula command locale-gen
Acum locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')
funcționează prea, și pot să-mi iau localizate zi și lună nume.
Mea Conclision:
Python : locale.locale_alias nu este deloc de ajutor în găsirea disponibile perfectă!!!
Linux : este destul de ușor pentru a obține listă locale și instalați noul locale. O mulțime de ajutor disponibile.
Windows : am investigat un pic, dar nimic concludent. Există și posturi care să conducă la răspunsuri, dar nu am simțit nevoia să-l urmărească.
dacă am înțeles corect, principala sursă de eroare aici este exact sintaxa locale-numele. Mai ales ca nu pare să difere de distribuții. Am'am vazut mentionat aici în diferite răspunsuri/comentarii:
de_DE.utf8
de_DE.UTF-8
Chiar dacă acest lucru este, evident, aceeași pentru o ființă umană, la fel nu țineți pentru dumneavoastră standard algoritm determinist.
Deci, probabil, va face ceva de-a lungul liniilor de:
DESIRED_LOCALE=de
DESIRED_LOCALE_COUNTRY=DE
DESIRED_CODEPAGE_RE=\.[Uu][Tt][Ff].?8
if [ $(locale -a | grep -cE "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}") -eq 1 ]
then
export LC_ALL=$(locale -a | grep -m1 -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")
export LANG=$LC_ALL
else
echo "Not exactly one desired locale definition found: $(locale -a | grep -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")" >&2
fi
în primul rând, asigurați-vă că aveți language pack instalat de a face :
sudo apt-get install language-pack-en-base
sudo dpkg-reconfigure locales