【发布时间】:2019-09-28 12:57:00
【问题描述】:
我有一个自定义用户模型,它有一个preferred_language 字段。我希望将所有电子邮件(激活和密码重置)翻译成用户在配置文件中指定的语言。
class CustomUser(AbstractBaseUser, PermissionsMixin):
...
LANGUAGE_CHOICES = (
(1, "English"),
(2, "Русский")
)
preferred_language = models.PositiveSmallIntegerField(choices=LANGUAGE_CHOICES, default=2,
verbose_name=_("Preferred language"))
我考虑过设置自定义电子邮件类,但在 navive djoser 的课程中没有看到任何我可以明确设置结果电子邮件语言的点,尽管电子邮件模板的样式有待翻译:
class ActivationEmail(BaseEmailMessage):
template_name = 'email/activation.html'
def get_context_data(self):
context = super(ActivationEmail, self).get_context_data()
user = context.get('user')
context['uid'] = utils.encode_uid(user.pk)
context['token'] = default_token_generator.make_token(user)
context['url'] = settings.ACTIVATION_URL.format(**context)
return context
重置密码视图(在上面的 ActivationEmail 类中使用的参考是 settings.EMAIL.activation):
class ResetPassword(ActionViewMixin, generics.GenericAPIView):
...
def send_password_reset_email(self, user):
context = {'user': user}
to = [get_user_email(user)]
settings.EMAIL.password_reset(self.request, context).send(to)
def send_activation_email(self, user):
context = {'user': user}
to = [get_user_email(user)]
settings.EMAIL.activation(self.request, context).send(to)
【问题讨论】:
-
邮件什么时候发送给用户?单击按钮后或与网站交互后自动(例如交易、时事通讯、注册等?)。
-
注册后点击“密码重置按钮”。我使用 djoser 端点。
-
免责声明:我从未使用过
djoser。您是否介意显示实际发送电子邮件的文件(可能是views.py)或djoser自动执行此操作并且您想在发送电子邮件之前设置语言? -
是的,我已经在问题的底部提供了它
-
我认为您的电子邮件模板(
.txt或.html)包含标记为翻译的字符串(即它们包含{% trans "text" %}等),对吧?
标签: email internationalization django-i18n djoser