首页 > 解决方案 > 如何从 Django 的管理站点更改用户语言?

问题描述

我正在实施 Django 的 I18N 来翻译一个项目并且工作非常顺利。问题是我正在处理其他人的项目,并且用户个人资料中有一个名为“语言”的字段,它是一个填充有“esp”或“eng”的字符字段。因此,可以从管理站点更改任何用户的语言。

有没有办法使用 Django 的 I18N 从 django 管理站点更改任何用户语言?

注意:我不是要更改管理站点语言。我试图以用户 A 的身份进入管理站点并修改用户 B 以更改用户 B 看到该站点的语言。在我的设置中,我有可用的“es”和“en”语言代码。

标签: djangodjango-admindjango-i18n

解决方案


假设您在用户上有一个可以访问的语言字段,例如 request.user.language。

from django.utils import translation


class UserLanguageActivationMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        user = getattr(request, "user", None)
        if user:
            translation.activate(user, getattr(user, language, "Some meaning full default language"))

    return self.get_response(request)

然后将其添加到您的中间件类中。


推荐阅读