Django Form 忽略翻译并回退到默认
Django Form ignores translation and falls back to default
我最近在我的 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"), validators=[MinLengthValidator(3)],
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
就可以了。
我最近在我的 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"), validators=[MinLengthValidator(3)],
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
就可以了。