如何解决登录Django后如何设置整个会话的语言
我被卡住了,试图为整个会话设置语言,以便根据登录时输入的语言显示菜单、表单等。
为此,我定义了以下内容:
'django.middleware.locale.LocaleMiddleware',
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.locale.LocaleMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]
还要添加上下文渲染器:
'django.template.context_processors.i18n'
我定义了我的 3 种语言:
LANGUAGE_CODE = 'es'
LANGUAGES = [
('es' _('Spanish')),('en',_ ('English')),('it',_ ('Italian')),]
这是我的观点:
class LoginFormView(FormView):
form_class = UserLoginForm
template_name = 'login.html'
success_url = reverse_lazy('index')
def dispatch(self,request,*args,**kwargs):
if request.user.is_authenticated:
return HttpResponseRedirect(self.success_url)
return super().dispatch(request,**kwargs)
def form_valid(self,form):
login(self.request,form.get_user())
user_language = self.request.POST.get('language',None)
translation.activate(user_language)
self.request.session['django_language'] = user_language
self.request.session[translation.LANGUAGE_SESSION_KEY] = user_language
return HttpResponseRedirect(self.success_url)
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Iniciar sesión'
return context
尽管如此,登录后的语言不会改变,始终保持为西班牙语。
所有模板都有标签:
{% load i18n %}
我还尝试通过在导航栏中放置一个按钮来强制更改语言,以测试翻译是否有效并且确实运行良好:
<button type="button" class="btn-shadow p-1 btn btn-primary btn-sm">
{% include 'change_language.html' %}
<i class="fa text-white fa-calendar pr-1 pl-1"></i>
</button>
change_language.html
{% load i18n %}
<form action="/i18n/setlang/" method="post" style="display: inline;">
{% csrf_token %}
<div style="display: inline;">
<select name="language" onchange="javascript:form.submit()">
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}"{% ifequal LANGUAGE_CODE lang.0 %} selected="selected"{% endifequal %}>{{ lang.1 }}</option>
{% endfor %}
</select>
</div>
</form>
因此,我不知道我放在 form_valid() 中的代码是否正确以及是否应该放在那里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。