我正在将django网站翻译成6种语言。这是我第一次翻译。
这是一个电子商务网站。如何翻译模型的字段?例如:当我尝试{% trans cat.name %}
或ugettext(cat.name)
答案 0 :(得分:4)
答案 1 :(得分:1)
使用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
作为可翻译的字符串。
答案 2 :(得分:1)
from django.utils.translation import ugettext as _ class Book(models.Model): title = models.CharField(_('title'),max_length=50)
你也可以这样做。 标题将成为可转换的字符串
答案 3 :(得分:0)
所有答案中缺少的是应该使用哪种类型的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])
答案 4 :(得分:0)
尽管这个项目很老,但它似乎是使用最频繁且维护最完善的解决方案:
答案 5 :(得分:0)
选项A:
实际上很简单。假设您不想继续检查您的语言环境文件(或依赖于诸如Rosetta的第三方编辑)可能很乏味,那么您可以简单地动态转换所有模型字段。 一种实现方法是通过应用程序:django-parler,它允许您利用其TranslatableModel,TranslatedFields类。 ----有关更多信息,请参见《 Django 3 by Example:第9章》(非常详尽)。
选项B
如果您的选择受选择限制( IT HAPPENS )...并且您的模型字段依赖于预定选择的列表,则可以像以下那样简单地进行选择翻译:>
在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')
定义选择后,您只需遵循框架的国际化/本地化建议。