【问题标题】:Django Form ignores translation and falls back to defaultDjango Form 忽略翻译并回退到默认值
【发布时间】:2020-10-03 21:15:28
【问题描述】:

我最近在我的 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 也是英文的。

德语翻译是正确的。

感谢任何帮助。

【问题讨论】:

    标签: django django-i18n


    【解决方案1】:

    您正在使用gettext,它在调用时运行并翻译所有内容,并且您的表单主体仅在您启动服务器时运行一次。但是,您希望每次收到请求时都使用当前的活动语言(通常由中间件设置)进行翻译。

    阅读here 了解更多信息。

    为了快速解决问题,只需将gettext 转到gettext_lazy 即可。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2013-11-05
      • 2011-12-14
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      相关资源
      最近更新 更多