我使用的是Django 1.9 class-based generic views,例如CreateView。当我访问“创建”页面时,某些部分被翻译(在我的示例中为法语),所以我知道我的配置和连线是正确的,但表单字段(由视图自动命名)不是(即form.as_p )。
如何从翻译文件中获取表单字段? (例如,“名称”是一个已翻译但未被form.as_p获取的字段。
一个答案是使用{%trans%}标记在模板中单独列出字段。我本来希望避免这种情况。
我的例子类似于the docs中的例子,所以让我在这里重复一下这个例子。首先,代码:
from django.views.generic.edit import CreateView
from myapp.models import Author
class AuthorCreate(CreateView):
model = Author
fields = ['name']
然后显示模板:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save" />
</form>
答案 0 :(得分:2)
当对这些函数的调用位于在模块加载时执行的代码路径中时,这是必不可少的。
在定义
models
,forms
和model forms
时很容易发生这种情况,因为Django会实现这些,以便它们的字段实际上是class-level
属性。
因此,如果您有表单,可以使用ugettext_lazy
进行翻译:
from django.db import models
from django.utils.translation import ugettext_lazy as _
class MyThing(models.Model):
name = models.CharField(help_text=_('This is the help text'))
您可以使用
ForeignKey
选项将ManyToManyField
,OneToOneField
或verbose_name
关系的名称标记为可翻译:
class MyThing(models.Model):
kind = models.ForeignKey(
ThingKind,
on_delete=models.CASCADE,
related_name='kinds',
verbose_name=_('kind'),
)