我正在将django网站翻译成6种语言。这是我第一次进行翻译工作。
网站是一个电子商务网站。我该如何翻译模型的字段?例如:类别名称实际上在数据库中,并且当我尝试使用
网站是一个电子商务网站。我该如何翻译模型的字段?例如:类别名称实际上在数据库中,并且当我尝试使用
{% trans cat.name %}
或ugettext(cat.name)
时,它没有被写入po文件。{% trans cat.name %}
或ugettext(cat.name)
时,它没有被写入po文件。Use verbose_name:
class Book(models.Model):
title = models.CharField(verbose_name=_('Title'),max_length=50)
class Meta:
verbose_name = _('Book')
verbose_name_plural = _('Books')
Book
、Title
和Books
。django-lingua
的作者正在为 django-modeltranslation
做贡献,而且这个项目非常活跃。 - Mr. B.从django.utils.translation中导入ugettext as _ class Book(models.Model): title = models.CharField(_('标题'),max_length=50)
你也可以这样做。 title将成为可翻译的字符串。
所有答案中缺少的是您应该使用哪种类型的gettext。原来您需要使用gettext_lazy
,以下是我的可工作代码
from django.utils.translation import gettext_lazy as _
class UnitCategory(models.Model):
id = models.AutoField(verbose_name=_('Category ID'), primary_key=True)
type = models.CharField(verbose_name=_(
'Category Type'), max_length=30, blank=False)
class Meta:
verbose_name = _('Unit Category')
verbose_name_plural = _('Unit Categories')
def get_absolute_url(self):
return reverse('core:units_categories_update', args=[self.id])
尽管这个项目已经老旧,但似乎是最常用和维护良好的解决方案:
选项A:
实际上很简单。假设您不想继续查看本地文件(或依赖于像Rosetta这样的第三方编辑),这可能会很繁琐,您可以简单地动态翻译所有模型字段。 一种方法是通过应用程序:django-parler,它允许您利用其TranslatableModel、TranslatedFields类。 ----更多信息可以在书籍Django 3 by Example: Chapter 9中找到(非常详尽)。
选项B
如果您的选择受到选择的限制(这种情况确实存在)...并且您的模型字段依赖于预先确定的选择列表,则可以简单地使选择可翻译,如下所示:
在models.py中
from django.utils.translation import gettext_lazy as _
class Products(models.Model):
class ProductName(models.TextChoices):
RAD = 'RD', _('Radio')
TEL = 'TV', _('Television')
details: [https://docs.djangoproject.com/en/3.1/ref/models/fields/][1]
或者如果您正在使用枚举
在enums.py中
from django.utils.translation import gettext_lazy as _
@unique
class StudentChoice(Enum):
rad = _('Radio')
tel = _('Television')
在定义了您的选择后,您只需遵循框架的国际化/本地化建议即可。