Django-在数据库中存储用户的语言

Django-在数据库中存储用户的语言,django,internationalization,django-i18n,Django,Internationalization,Django I18n,我可以通过django的内置功能更改用户的语言 path('i18n/', include('django.conf.urls.i18n')), 为了向用户发送翻译成其语言的电子邮件,我想知道用户的激活语言 如何在db中保存的语言 有没有其他方法来了解这门语言 这是一节课: from django.utils import translation request.session[translation.LANGUAGE_SESSION_KEY] 使用Django提供的工具可以避免将语言首选项

我可以通过django的内置功能更改用户的语言

path('i18n/', include('django.conf.urls.i18n')),
为了向用户发送翻译成其语言的电子邮件,我想知道用户的激活语言

如何在db中保存的语言

有没有其他方法来了解这门语言

这是一节课:

from django.utils import translation
request.session[translation.LANGUAGE_SESSION_KEY]

使用Django提供的工具可以避免将语言首选项保存到数据库的开销

,返回当前线程中使用的语言

如文件所述,这是一个示例:

from django.utils import translation

def welcome_translated(language):
    cur_language = translation.get_language()
    try:
        translation.activate(language)
        text = translation.gettext('welcome')
    finally:
        translation.activate(cur_language)
    return text
您还可以使用来分析请求,以找到用户希望系统显示的语言,如中所述

但是,请确保您的操作正确


Marina Mele已经写了一篇文章,您可以查看第二种观点。

在您的
用户
模型中,您需要添加一个新字段:

    interface_language = models.CharField(max_length=10, blank=True)
然后您需要创建如下中间件:

from django.utils import translation

def language_middleware(get_response):
    def middleware(request):
        user = getattr(request, 'user', None)
        if user is not None and user.is_authenticated:
            translation.activate(user.interface_language)
        response = get_response(request)
        translation.deactivate()
        return response
    return middleware
需要在
django.contrib.auth.middleware.AuthenticationMiddleware
之后将中间件添加到您的设置中:

MIDDLEWARE = [
    # ...
    'django.contrib.auth.middleware.AuthenticaitonMiddleware',
    'language_middleware',
    # ...
]

或者,您也可以使用Pypi包,如。

有用的答案。但是这里有更多关于我的意思的解释:
对于所有用户中的用户:向用户发送电子邮件(用户,他的语言偏好)
。。。。你明白吗?语言将在其中呈现模板language@EuChi好的,我明白了,你需要在会议结束后发送一封电子邮件。我认为最好是在注册表中询问用户,他喜欢的交流语言是什么。我问了,有一个选择下拉列表,用户可以选择他的语言,内置django功能。因此,我希望能够在发送电子邮件时在循环中知道如何以特定用户选择的语言呈现模板。@EuChi您能用从用户收集信息并保存到数据库的代码更新问题吗?不,我不能,这是我不能做的。我想知道如何做,当他改变语言时如何得到它。我认为Django对此不可避免地有一个信号,如果
用户不是或不是用户。是否经过身份验证
,您将使用
get\u language()