로케일 인식 방식으로 문자열 목록을 정렬하려고합니다. 다른 i18n 관련 작업에 Babel 라이브러리를 사용했지만 정렬을 지원하지 않습니다. Python의 locale모듈은 strcoll함수를 제공 하지만 프로세스의 로케일을 작업하려는 로케일로 설정해야합니다. 약간의 고통이지만 나는 그것으로 살 수 있습니다.
문제는 실제로 로케일을 설정할 수 없다는 것입니다. 문서 에 대한 locale모듈은이 예제를 제공합니다 :
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
그것을 실행하면 다음과 같이 표시됩니다.
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
내가 도대체 뭘 잘못하고있는 겁니까?
답변
Windows를 사용중인 것 같습니다. 로케일 문자열이 다릅니다. 문서를보다 정확하게 살펴보십시오.
locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform
Windows에서는 다음과 같을 것이라고 생각합니다.
locale.setlocale(locale.LC_ALL, 'deu_deu')
MSDN에는 언어 문자열 및 국가 / 지역 문자열 목록이 있습니다.
답변
이것이 독일어 로케일에 대한 예제를 제공하는 유일한 올바른 사용 방법입니다.
import locale
locale.setlocale(category=locale.LC_ALL,
locale="German" # Note: do not use "de_DE" as it doesn't work)
답변
setlocale에 명시 적 로케일 을 전달 해서는 안됩니다 . 잘못된 것입니다. 환경에서 알아 내십시오. 빈 문자열을 전달해야합니다.
import locale
locale.setlocale(locale.LC_ALL, '')
답변
우분투
Ubuntu에서는 시스템에 해당 로컬이 설치되어 있지 않기 때문에이 문제가 발생할 수 있습니다.
쉘에서 다음을 시도하십시오.
$> locale -a
관심있는 로케일이 있는지 확인하십시오. 그렇지 않으면 설치해야합니다.
$> sudo apt-get install language-pack-XXX
여기서 XXX는 귀하의 언어입니다 (제 경우에는 “xxx = it”, 이탈리아어 로케일). 그런 다음 다음을 실행하십시오 dpkg-reconfigure.
$> sudo dpkg-reconfigure locales
그 후 파이썬 셸에서 다시 시도하십시오.
>>> import locale
>>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(이것은 내가 필요한 이탈리아어 로케일을위한 것입니다)
답변
나는 이것이 몇 년 전에 요청되었다는 것을 알고 있지만 Windows에서 Python 3.6을 사용하여 내가 찾은 것을 추가하려고 생각했습니다.
import locale
for x in locale.windows_locale.values():
print(x.replace('_','-'))
나는 몇 가지를 시도했고 그것은 또한 Windows에서 사용할 수있는 것을 찾는 방법 인 것 같습니다.
알아두면 좋은 점 : 이것은 어떤 이유로 현재 안정된 Python 버전에서 strptime ()과 호환되지 않습니다.
그런 다음 로케일을 설정하기 만하면됩니다.
locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)
답변
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.
""""
Linux (특히 Ubuntu)에서는 다음 중 하나를 사용할 수 있습니다.
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
또는
locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
로케일이 시스템에 설치되지 않은 경우 동일한 오류가 발생합니다 . 따라서 시스템에 로케일이 설치되어 있는지 확인하십시오 .
$ locale -a # to list the currently installed locales
$ (sudo) locale-gen de_DE.UTF-8 # to install new locale
답변
