2016-11-25 3 views
0

В проекте Django я переводит строки, используя ugettext из модуля django.utils.translation. Например, я переводил строки в свой models.py.Django хрустящие формы: нет i18n?

Перевод работает отлично, но не с хрустящими формами. Почему это и как я могу это исправить?

Пример 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 по-прежнему отображается как «немецкий», а не «Deutsch».

ответ

1

Попробуйте использовать ugettext_lazy.

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

В определениях, как форма или модель, которые вы должны использовать ugettext_lazy, потому что код этого определения выполняется только один раз (в основном при запуске Джанго); ugettext_lazy переводит строки в ленивом виде, что означает, например. каждый раз, когда вы получаете доступ к имени атрибута на модели, строка будет переведена снова, что имеет смысл, потому что вы можете смотреть на эту модель на разных языках с момента запуска django!

c.f. также crispy_forms test suite

+0

Спасибо, это помогло! – Daniel

+0

Отлично! –

Смежные вопросы