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

时间:2018-12-28 17:30:37

标签: django internationalization django-i18n

我能够使用django的内置功能更改用户的语言

path('i18n/', include('django.conf.urls.i18n')),

为了向使用他的语言翻译的用户发送电子邮件,我想知道用户的激活语言。

如何在db中保存语言?

还有另一种了解该语言的方法吗?

这是会话:

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

2 个答案:

答案 0 :(得分:1)

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

django.utils.translation.get_language,返回当前线程中使用的语言。

in 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

您还可以使用django.utils.translation.get_language_from_request分析请求,以找到用户希望系统显示的语言,如this answer中所述。

但是,请确保您正确使用setup Django

Marina Mele写了a tutorial,您可以查看第二点观点。

答案 1 :(得分:0)

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

    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',
    # ...
]

或者,您也可以使用django-user-language-middleware之类的Pypi软件包。