[python] Windows에서 Python의 로케일을 설정하는 올바른 방법은 무엇입니까?

로케일 인식 방식으로 문자열 목록을 정렬하려고합니다. 다른 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


답변