Django Form会忽略翻译并恢复默认设置

问题描述

我最近在我的Django应用中引入了翻译(i18n)。

它适用于所有模板和错误消息。 不幸的是没有表格。即使页面的其余部分以德语显示,它也始终会退回到英语。

settings.py:

LANGUAGE_CODE = 'en'
USE_I18N = True
USE_L10N = True

forms.py:

from django import forms
from django.utils.translation import gettext as _
from django.conf import settings
from django.core.validators import DecimalValidator,MaxLengthValidator,EmailValidator,MinLengthValidator

class AccountCompanyNameForm(forms.ModelForm):
    # adding some default validators
    phone = forms.CharField(validators=[MinLengthValidator(10)],error_messages={'invalid': _("Bitte geben Sie eine gültige Rufnummer an.")})
    name = forms.CharField(label=_("Vorname Nachname"),validators=[MinLengthValidator(3)],error_messages={'invalid': _("Bitte geben Sie Ihren Vor- und Nachnamen ein.")})
    company = forms.CharField(label=_("Firma"),error_messages={'invalid': _("Bitte geben Sie den Namen Ihrer Firma an.")})
    birthdate = forms.DateField(label=_("Geburtsdatum"),error_messages={'invalid': _("Bitte geben Sie das Datum im Format 01.01.1990 ein.")})
    terms = forms.BooleanField()

模板代码

{% load i18n %}
{% load widget_tweaks %}
... 
{% render_field form.company placeholder=form.company.label class+="form-control" %}
...
{{ form.company.label }}

即使form.company.label是英语。

德语翻译在那里而且很正确。

感谢您的帮助。

解决方法

您正在使用gettext,它在被调用时会运行并转换所有内容,而表单主体在启动服务器时仅运行一次。但是,您希望每次收到请求时都将其翻译为当前有效的语言,该语言通常由中间件设置。

阅读here以获得更多信息。

要进行快速修复,只需将那里的gettext转到gettext_lazy,您就可以进行了。