在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
的选项仍然显示为“德语”而非“德语”。
答案 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