Django脆皮形式:没有i18n?

时间:2016-11-25 12:47:54

标签: python django django-crispy-forms

在Django项目中,我使用ugettext模块中的django.utils.translation翻译字符串。例如,我在models.py中翻译字符串。

翻译工作完美,但不是脆皮形式。为什么这样,我该如何解决这个问题?

示例models.py

from django.utils.translation import ugettext as _

class CustomerUser(models.Model):
    LANGUAGE_CHOICES = (
        ('en', _('English')),
        ('de', _('German')),
    )

    name = models.CharField(null=False, blank=False, max_length=50)
    user = models.ForeignKey(User, blank=True, null=True)
    email = models.EmailField(blank=True, null=True)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='en', max_length=2)
    customer = models.ForeignKey(Customer)
    changed_password = models.BooleanField(default=False)

    def __unicode__(self):
        return self.name

在视图中,我执行以下操作:

from django.utils import translation

translation.activate('de')

但不会翻译松脆的表格。来自language的选项仍然显示为“德语”而非“德语”。

1 个答案:

答案 0 :(得分:1)

尝试使用ugettext_lazy

c.f。 This great answer on "When should I use ugettext_lazy?"

  

在表单或模型之类的定义中,您应该使用ugettext_lazy,因为此定义的代码只执行一次(主要是在django' s启动时); ugettext_lazy以懒惰的方式翻译字符串,这意味着,例如。每次访问模型上的属性名称时,字符串都会被新翻译 - 这很有意义,因为自从django启动以来你可能会用不同的语言看这个模型!

c.f。还有crispy_forms test suite