我能够使用django的内置功能更改用户的语言
path('i18n/', include('django.conf.urls.i18n')),
为了向使用他的语言翻译的用户发送电子邮件,我想知道用户的激活语言。
如何在db中保存语言?
还有另一种了解该语言的方法吗?
这是会话:
from django.utils import translation
request.session[translation.LANGUAGE_SESSION_KEY]
答案 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软件包。