사용자에게 전자 메일을 보내는 작업자 프로세스를 사용하는 장고 프로젝트가 있습니다. 작업자 프로세스는 rabbitmq 서버를 청취하고 보낼 전자 메일, 템플릿 변수, 보낼 전자 메일 주소 등에 대한 모든 세부 정보를 가져옵니다. 전자 메일 본문은 장고 템플릿 및 render_to_string으로 작성됩니다.Django는 코드 블록을 위해 언어를 변환하여 하나의 언어로 번역합니다.
그러나 국제화하고 싶습니다. 일부 사용자는 영어로 웹 사이트를 사용하고 일부는 다른 언어로 사용하려고합니다. 그들은 그들의 언어로 이메일을 받아야합니다. 전자 메일 제목과 전자 메일 본문에 _(...) 또는 {% blocktrans %} resp가 포함되도록 전자 메일 작업자 프로세스 (django.utils.translations.ugettext/ugettext_lazy 사용)를 시도했습니다.
그러나 전자 메일은 다른 백그라운드 작업자 프로세스에서 렌더링되고 전송되기 때문에 보통 django language detection process이 적용되지 않습니다. 사용자 세션이 없으며 쿠키를 볼 수도없고 http 헤더를 볼 수도 없습니다. rabbitmq 서버에 메시지를 보낼 때 언어 코드를 저장할 수 있습니다.
django/gettext에게 한 번에 해당 언어를 사용하도록 지시하려면 어떻게해야합니까?
전자 메일을 보냅니다 내 기능은 다음과 같습니다
나는_()
해당 언어 코드를 사용할 수 있도록 특정 언어 코드에 장고 번역/gettext의 전환에 넣어 무엇을
def send_email(details):
lang = details['lang']
name = details['name']
email_address = details['email_address']
switch_gettext_to_this_language_what_goes_here(lang):
# ?????
email_subject = _("Welcome to $SITE")
?
'django.utils.translation'에는 종료시 원래의 로켈을 자동으로 재설정하는 'override (lang)'컨텍스트 관리자가 있습니다. –