모델 또는 관리자의 현재 스레드에서 현재 언어를 얻으려면 어떻게해야합니까?
답변
특히 관심있는 함수는 django.utils.translation.get_language()
현재 스레드에서 사용되는 언어를 반환합니다. 설명서를 참조하십시오 .
답변
또는 당신의 견해에서 이것을 얻을 수 있습니다
request.LANGUAGE_CODE
답변
언어를 얻기 위해 사용하는 방법에주의하십시오 . 어떤 방법에 따라 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.get_language()
하는 경우 해당 코드 섹션이 비동기 적으로 (예 : 셀러리 작업으로) 호출되는 경우이 접근 방식은 다른 스레드에서 실행되기 때문에 작동하지 않는다는 점을 명심해야합니다.
답변
당신은 이것을 사용할 수 있습니다
from django.utils import translation
translation.get_language()
