문제

시스템 로케일을 여러 가지 작업을 수행해야합니다. 궁극적으로 GetText를 사용하여 앱을 번역하고 싶습니다. Linux와 OSX에 모두 배포 할 것이지만 OSX Snow Leopard에서 문제를 해결했습니다.

$ python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'sv_SE.UTF-8'
>>> locale.getlocale()
('sv_SE', 'UTF8')

$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'C'
>>> locale.getlocale()
(None, None)

두 시스템 모두 스웨덴어 언어를 사용하고 있습니다. Linux에서 환경 변수 Lang은 이미 "sv_se.utf-8"으로 설정되었습니다. 해당 변수를 OSX에서 Python에 전달하면 (LANG="sv_SE.UTF-8" python 대신), 로케일은 멋지게 감지됩니다. 그러나해서는 안됩니다 locale.getlocale()운영 체제가 가지고있는 언어를 가져올 수 있습니까? 사용자가 설정하도록 강요하고 싶지 않습니다 LANG, LC_ALL 또는 모든 환경 변수.

출력 locale 명령:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
도움이 되었습니까?

해결책

OSX의 Odd (Smow Leopard 10.6.1) 나는 얻는다

$ python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.  
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, '')
'en_GB.UTF-8'
>>> locale.getlocale()
('en_GB', 'UTF8')

편집하다:

방금 이것을 찾았습니다 Apple Python 메일 링리스트

기본적으로 그것은 런 타임에 당신의 환경에서 설정된 것에 따라 달라집니다 (Lang, Language, LC_ALL) 나는 쉘 환경에 lang = en_gb.utf-8을 가졌습니다.

다른 팁

끔찍한 해킹이되었지만 이것을 삽입했습니다.

import platform

# ...

# XXX horrendous OS X invalid locale hack
if platform.system() == 'Darwin':
    import locale
    if locale.getlocale()[0] is None:
        locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

프로그램의 초기 시점에서 나의 것. 그 후 나는 나와 관련된 모든 OS'es에서 수정되지 않은 쉘 환경을 사용하여 프로그램을 실행할 수 있습니다 (내 프로그램은 어쨌든 처리 중에 사용될 언어를 알아냅니다).

환경 변수를 변경하여 로케일을 변경할 수있는 것 같습니다. LC_ALL.

$ export LC_ALL=C
$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, "")
'C'
>>> locale.getlocale()
(None, None)    

$ export LC_ALL=en_GB.UTF-8
$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.setlocale(locale.LC_ALL, "")
'en_GB.UTF-8'
>>> locale.getlocale()
('en_GB', 'UTF8')

에서 여기: 추가하거나 편집 해보십시오 ~/.profile 또는 ~/.bash_profile 새 세션을 시작할 때 로케일 설정을 올바르게 내보낼 수 있도록 파일.

export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

오래된 질문이지만 이것은 다른 사람들에게 도움이 될 수 있습니다. 이것은 2016 년 3 월 현재 Python 2 또는 3에서 여전히 해결되지 않은 파이썬 버그입니다. https://bugs.python.org/issue18378 .

요약은 Python은 GNU와 같은 로케일과 BSD 환경 (OS X)과 같은 (OS X)와 같은 분기를 획득한다는 것입니다. UTF8 로케일은 Linux가 아닌 BSD에 존재하므로 문제가 발생합니다.

솔루션 또는 디버깅의 경우 : 로컬 환경 변수는 Terminal.App (기본 설정 - 프로파일 - 고급 - 국제, 유사하게 ITERM 또는 무엇이든 참조)를 설정할 수 있습니다. 따라서 터미널 창에있을 때 설정된 로케일 환경 변수를 찾을 수 있지만 포장 된 응용 프로그램을 실행할 때 변수가 설정되지 않음을 찾을 수 있습니다.

일부 경우 (Python 2.7의 Sphinx와 같은, "ValueError : Unknown Locale : UTF-8"으로 인해 OS X에서 3.5 사망과 같은 경우, Locale 환경 변수를 설정하도록 환경 설정 확인란을 비활성화하는 것이 솔루션입니다.

그러나 다른 프로그램에서 문제를 일으킬 수 있습니다. 로케일 VARS가 설정되지 않으면 Bash 4.3 (MacPorts의 Bash 4.3)은 "경고 : setLocale : lc_ctype : locale () : 그러한 파일 또는 디렉토리를 변경할 수 없습니다. .

따라서 버그가 Python에있는 경우, 해결 방법은 아마도 파이썬 프로그램 (@jacob Oscarson의 답변에서와 같이) 또는 Python 호출 (로케일 VARS를 적절한 가치로 설정함으로써)에서 수행해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top