Dlaczego pojawia się następujący błąd podczas wykonywania tego w Pythonie:
>>> 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
Działa to również z innymi lokalizacjami, takimi jak fr lub nl. Używam Ubuntu 11.04.
Aktualizacja: Wykonanie następujących czynności nic nie dało:
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
python
locale
ubuntu-11.04
toom
źródło
źródło
de_DE
liścielocale -a
? Jeśli nie, musisz go zainstalować .locale.setlocale(locale.LC_ALL, 'de_DE')
jest źle. Trzebalocale.setlocale(locale.LC_ALL, 'de_DE.utf8')
.locale.setlocale(locale.LC_ALL, locale.locale_aliases['de_DE'])
.Odpowiedzi:
Uruchom następujące polecenia
Rozwiąże to.
Pamiętaj, aby dopasować
.UTF-8
część do faktycznej składni znalezionej w danych wyjściowychlocale -a
np. W.utf8
niektórych systemach.źródło
export LC_ALL="en_US.UTF-8"
nie powiodło się Z tym,-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
co działało, robiąc to:export LC_ALL=C
Zgodnie z tym linkiem rozwiązano go, wprowadzając następujące polecenie:
źródło
LC_ALL
na wartość'C'
- ale dlaczego miałoby to działać?Prawdopodobnie nie masz
de_DE
dostępnych ustawień regionalnych.Za pomocą polecenia możesz wyświetlić listę dostępnych ustawień regionalnych
locale -a
. Na przykład na moim komputerze:Pamiętaj, że jeśli chcesz ustawić ustawienia regionalne
it_IT
, musisz także określić.utf8
:Aby zainstalować nowe ustawienia regionalne, użyj:
gdzie
id
jest kod języka (wzięty stąd )Po zainstalowaniu ustawień regionalnych postępuj zgodnie z zaleceniami Juliena Palarda i ponownie skonfiguruj ustawienia regionalne za pomocą:
źródło
Jedna z powyższych odpowiedzi stanowi rozwiązanie:
Problem z powyższym rozwiązaniem polega na tym, że należy to zrobić na powłoce Linux-a. Jeśli jednak udostępniasz kod do pracy na komputerze klienckim, jest to złe podejście. Próbowałem również wykonać powyższe polecenia za pomocą os.system (), ale nadal nie działa.
Rozwiązaniem, które działało dla mnie jest
źródło
Trwałym rozwiązaniem byłoby uzupełnienie brakujących wartości w danych wyjściowych pokazanych poleceniem:
locale
Dane wyjściowe
locale
to:Aby uzupełnić brakujące wartości, edytuj ~ / .bashrc:
Dodaj następujące wiersze po powyższym poleceniu (załóżmy, że chcesz, aby en_US.UTF-8 był twoim językiem):
Jeśli ten plik jest tylko do odczytu, będziesz musiał wykonać kroki wymienione przez The GeekyBoy . Odpowiedź udzielona przez dr Beco w Superuser zawiera szczegółowe informacje dotyczące zapisywania plików tylko do odczytu.
Po zapisaniu pliku wykonaj:
Teraz już nie będziesz mieć do czynienia z tym samym problemem.
źródło
Jeśli korzystasz z Debiana (lub rozwidlenia Debiana), możesz dodać ustawienia narodowe, używając:
źródło
dpkg-reconfigure locales
wyświetla Ci się lokalne menu wyboru, takie jak to: vpser.net/uploads/2013/01/dpkg-reconfigure-locales-1.jpg ?W Arch Linux mogłem to naprawić, uruchamiając
sudo locale-gen
źródło
Dla przypomnienia, miałem ten sam problem, ale żadne z rozwiązań nie zadziałało. Zaktualizowałem komputer i przeprowadziłem migrację komputera. Miałem mieszany lokalny angielski i hiszpański:
Ale w mojej nowej instalacji Debiana właśnie wybrałem język angielski jako lokalizację. To, co w końcu zadziałało, polegało na ponownej konfiguracji pakietu locales, aby dodać i wygenerować również hiszpański.
źródło
Po prostu otwórz plik .bashrc i dodaj go
a następnie wpisz source .bashrc w terminalu.
źródło
Twój błąd wyraźnie mówi, że próbujesz użyć ustawień regionalnych czegoś tam nie było.
locale.Error: nieobsługiwane ustawienie regionalne
Aby sprawdzić dostępne ustawienia, użyj
locale -a
więc możesz użyć jednego z nich,
dla
de_DE
Ten plik można dostosować ręcznie lub zaktualizować za pomocą narzędzia update-locale.
źródło
locale
aby uzyskać informacje o używanych ustawieniach regionalnych. Jak na przykład:/etc/locale-gen
pliku. Odkomentowanie używanychlocale-gen
aby wygenerować nowo dodane ustawienia narodoweźródło
Moim zdaniem najłatwiejszym sposobem ustawienia lokalnych ustawień regionalnych w python {, 3} jest:
Następnie rzeczy zorientowane na ustawienia regionalne po prostu działają, jeśli masz przyzwoitą dystrybucję linuksową i powinny działać również na dystrybucjach binarnych innych systemów operacyjnych (lub to jest błąd IMHO).
źródło
Umieść go
Dockerfile
powyżejENV
.źródło
locale
w terminalu dostajesz `LANG = en_US.UTF-8 i inne ustawienia regionalne? stackoverflow.com/questions/36394101/…Ten błąd może wystąpić, jeśli właśnie dodałeś nowe ustawienia regionalne. Musisz ponownie uruchomić interaktywną powłokę Pythona (
quit(
) ipython
), aby uzyskać do niej dostęp.źródło
Gdybym był tobą, użyłbym BABEL: http://babel.pocoo.org/en/latest/index.html
Mam ten sam problem przy użyciu Dockera, próbowałem każdego kroku i nie działałem dobrze, zawsze pojawiał się błąd lokalizacji, więc zdecydowałem się użyć BABEL i wszystko działało dobrze.
źródło
Próbując zmusić Pythona do wyplucia nazw w określonych lokalizacjach , wylądowałem tutaj z tym samym problemem.
Szukając odpowiedzi, sprawy stały się trochę mistyczne.
Znalazłem ten kod python.
I rzeczywiście
locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')
działaKorzystając ze wskazówek, przetestowałem dalej, aby zobaczyć, co jest dostępne przy użyciu kodu python
co daje
Z których tylko powyższe działa! Ale
en_DK.UTF-8
nie ma go na tej liście, chociaż działa!?!? Co?? A lista ustawień narodowych wygenerowana w Pythonie zawiera wiele kombinacji da i DK, których szukam, ale znowu nie ma UTF-8 dla da / DK ...Jestem na dystrybucji Linuksa Point (opartej na Debianie), a tutaj
locale
mówi między innymiLC_TIME="en_DK.UTF-8"
, że wiem, że działa, ale nie w lokalizacji, której potrzebuję.locale -a
mówiWięc zdecydowanie muszę zainstalować inne ustawienia regionalne , co zrobiłem przez edycję
/etc/locale.gen
, odkomentowanie potrzebnej liniida_DK.UTF-8 UTF-8
i uruchomienie polecenialocale-gen
Teraz
locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')
też działa i mogę uzyskać moje zlokalizowane nazwy dni i miesięcy.Moja konkluzja:
Python: locale.locale_alias wcale nie jest pomocny w wyszukiwaniu dostępnych ustawień regionalnych !!!
Linux: bardzo łatwo jest uzyskać listę ustawień regionalnych i zainstalować nowe ustawienia regionalne. Dostępna jest duża pomoc.
Windows: Trochę badałem, ale nic rozstrzygającego. Są jednak posty prowadzące do odpowiedzi, ale nie odczuwałem potrzeby, by je realizować.
źródło
jeśli dobrze rozumiem, głównym źródłem błędu jest dokładna składnia nazwy ustawienia narodowego. Zwłaszcza, że wydaje się różnić między dystrybucjami. Wspomniałem tutaj w różnych odpowiedziach / komentarzach:
Chociaż jest to oczywiście to samo dla człowieka, to samo nie dotyczy standardowego algorytmu deterministycznego.
Prawdopodobnie zrobisz coś w stylu:
źródło
python szuka .UFT-8, ale prawdopodobnie masz .utf8 spróbuj zainstalować pakiety .UFT-8 z sudo dpkg-rekonfiguruj ustawienia regionalne
źródło
najpierw upewnij się, że masz zainstalowany pakiet językowy, wykonując:
źródło