Próbuję posortować listę ciągów w sposób uwzględniający ustawienia regionalne. Użyłem biblioteki Babel do innych zadań związanych z i18n, ale nie obsługuje ona sortowania. locale
Moduł Pythona zapewnia strcoll
funkcję, ale wymaga ustawienia ustawień regionalnych procesu na to, z którym chcę pracować. Trochę bólu, ale mogę z tym żyć.
Problem polega na tym, że nie mogę ustawić ustawień regionalnych. Dokumentacji dla locale
modułu daje ten przykład:
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
Kiedy to uruchamiam, otrzymuję to:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting
Co ja robię źle?
Ubuntu 13.04
,Linux 3.8.0-19
z pythonem2.7.4
podczas próby ustawienia ustawień regionalnych nafr_FR
. Ustawienie tofr_FR.UTF-8
zadziałało dla mnie.'eng_usa'
('en_US'
nie działały)Jest to jedyny poprawny sposób korzystania z niego, podając przykład dla niemieckiej lokalizacji:
import locale locale.setlocale(category=locale.LC_ALL, locale="German" # Note: do not use "de_DE" as it doesn't work)
źródło
German
sięPortuguese_Brazil.1252
. Czy znasz dokumentację zawierającą te wartości?Nie powinieneś przekazywać jawnego locale do setlocale, to jest złe. Niech dowie się z otoczenia. Musisz przekazać mu pusty ciąg
import locale locale.setlocale(locale.LC_ALL, '')
źródło
Ubuntu
W systemie Ubuntu możesz mieć ten problem, ponieważ nie masz tego lokalnego zainstalowanego w systemie.
Z powłoki spróbuj:
i sprawdź, czy znalazłeś interesującą Cię lokalizację. W przeciwnym razie musisz ją zainstalować:
gdzie XXX to Twój język (w moim przypadku „xxx = it”, język włoski) Następnie uruchom
dpkg-reconfigure
:Następnie spróbuj ponownie w powłoce Pythona:
>>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(to jest dla włoskiego regionu, czego potrzebowałem)
źródło
Wiem, że zadawano to wiele lat temu, ale pomyślałem, że spróbuję dodać to, czego się dowiedziałem, używając Pythona 3.6 w systemie Windows:
import locale for x in locale.windows_locale.values(): print(x.replace('_','-'))
Wypróbowałem kilka i to również wydaje się być sposobem na sprawdzenie, co jest dostępne w systemie Windows.
Warto wiedzieć: z jakiegoś powodu nie jest to zgodne ze strptime () w obecnej stabilnej wersji Pythona
Następnie po prostu ustawiasz lokalizację:
locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)
źródło
Z dokumentów locale.setlocale:
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. """"
W Linuksie (zwłaszcza Ubuntu) możesz użyć
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
lub
locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
Otrzymasz ten sam błąd, jeśli lokalizacja nie jest zainstalowana w systemie. Więc upewnij się, że masz zainstalowane ustawienia regionalne :
$ locale -a # to list the currently installed locales $ (sudo) locale-gen de_DE.UTF-8 # to install new locale
źródło