Django에서 현재 언어를 얻으려면 어떻게해야합니까?


93

모델 또는 관리자의 현재 스레드에서 현재 언어를 얻으려면 어떻게해야합니까?


5
구체적으로 말씀해주세요. '내 웹 언어'-웹 요청, 웹 서버 또는 무엇을 의미합니까?
mikemaccana

답변:


139

특히 관심있는 함수는 django.utils.translation.get_language()현재 스레드에서 사용되는 언어를 반환합니다. 설명서를 참조하십시오 .


2
주의 : 번역이 일시적으로 비활성화 된 경우 (deactivate_all ()에 의해 또는 None이 override ()에 전달되는 경우) None을 반환합니다. Django 1.8 이전에는 번역이 비활성화되었을 때 get_language ()가 항상 LANGUAGE_CODE를 반환했습니다.
Pieter

89

또는 당신의 견해에서 이것을 얻을 수 있습니다

request.LANGUAGE_CODE

6
나는 이것을 (어떤 이유로 -1에서) 투표했습니다. 다음을 참고하십시오 ( docs.djangoproject.com/en/dev/topics/i18n/deployment/… "정적 (미들웨어없는) 번역의 경우 언어는 settings.LANGUAGE_CODE에있는 반면, 동적 (미들웨어) 번역의 경우에는 request.LANGUAGE_CODE. "
Alexander Marquardt

4
그 링크는 죽었고 위의 문서화 된 허용 솔루션을 사용하지 않을 이유가 없습니다.django.utils.translation.get_language()
qris

4
예를 들어 모델에서 언어를 얻으려는 시도는 아직 요청이 없으면 불가능합니다. django.utils.translation.get_language()항상 더 나은 해결책 이라고 생각합니다 .
Hussam 2015 년

템플릿에서 현재 언어를 가져 오는 것은 어떻습니까?
azmeuk

2
당신이 @azmeuk이 유용 할 수 있습니다 docs.djangoproject.com/en/dev/topics/i18n/translation/...
Ignas Butėnas

37

언어를 얻기 위해 사용하는 방법에주의하십시오 . 어떤 방법에 따라 Django는 사용할 올바른 언어를 결정 하기 위해 다른 방법과 정보 를 사용합니다.

django.utils.translation.get_language()함수를 사용할 때 스레드 언어에 연결 됩니다. Django 1.8 이전 settings.LANGUAGE_CODE에는 번역이 비활성화되었을 때 항상 반환 되었습니다. 스레드 언어를 수동으로 재정의하려면 override()또는 activate()함수를 사용할 수 있습니다. 이는 명시 적으로 이름이 지정되지는 않았지만 여전히 유용합니다.

from django.utils import translation

with translation.override('fr'):
    print(_("Hello")) # <= will be translated inside the with block

translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually

django가 경로 및 / 또는 요청 (언어 쿠키, ...) 을 확인하기를 원하면 (언어 쿠키, ...) 훨씬 더 일반적입니다 (예 : www.example.com/en/<somepath>vs www.example.com/fr/<somepath>) django.utils.translation.get_language_from_request(request, check_path=False). 또한 항상 유효한 언어 세트를 반환합니다.settings.LANGUAGES

이 주제에 대해 Google을 통해 이러한 차이점을 찾는 것이 그리 쉽지 않다는 것을 알았습니다.


django.utils.translation번역 이 아니라입니다. 제공된 링크에 잘못된 철자가 있습니다. 스 니펫에서는 정확합니다.
J0ANMM

4
django.utils.translation.get_language()과 (과) 의 차이는 +1입니다 django.utils.translation.get_language_from_request(request, check_path). 보기에, 당신은 후자를 사용해야하는 경우 check_path = True. 귀하의 템플릿을 렌더링 얻을 것이다 언어 얻을
드레이 Skalicka

7

사용 django.utils.translation.get_language()하는 경우 해당 코드 섹션이 비동기 적으로 (예 : 셀러리 작업으로) 호출되는 경우이 접근 방식은 다른 스레드에서 실행되기 때문에 작동하지 않는다는 점을 명심해야합니다.


2
확실한 방법은 여기 작업 매개 변수 및 translation.activate (언어)을 다음 언어 설정과 같은 언어를 통과하는 것
xyzman

1

당신은 이것을 사용할 수 있습니다

from django.utils import  translation
translation.get_language()

micha480이 이미 답변했습니다. 당신의 대답은 어떤 가치도 추가하지 않습니다.
Samuel Dauzon

0

시스템의 locale언어 정보를 읽을 수 있습니다 .


5
-3으로 조정되었지만 질문이 모호하다고 생각합니다. "현재 웹 언어"입니다. 이것이 OS를 의미한다고 추측하는 당신의 잘못이 아닙니다.
mikemaccana
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.