Интернационализация моделей в Django

Есть обычная модель в Django:

class Article(models.Model):
    status          = models.BooleanField(verbose_name="Активна")
    date            = models.DateField(verbose_name="Дата",auto_now=False, auto_now_add=False)
    name_short      = models.CharField(max_length=100, verbose_name="Короткое название")
    name_full       = models.CharField(max_length=300, verbose_name="Длинное название", null=True, blank=True)
    content_full    = models.TextField(verbose_name="Содержимое страницы", null=True, blank=True)
    content_preview = models.TextField(verbose_name="Превью-текст", null=True, blank=True)
    ##
    page_url = models.CharField(max_length=100, verbose_name="URL")
    page_title = models.CharField(max_length=300, verbose_name="Title", null=True, blank=True)
    page_description = models.CharField(max_length=300, verbose_name="Desc", null=True, blank=True)
    page_keywords = models.CharField(max_length=300, verbose_name="Keys", null=True, blank=True)
    ##
    def __str__(self):
        return '%s' % (self.name_short)

Задача сделать так чтобы некоторые поля: name_short, name_full, content_full и т.д. могли быть заполнены в других языках которые прописаны в settings.py

я так понимаю решения "из коробки" как для перевода текста в шаблонах нет


Ответы (1 шт):

Автор решения: Vadim.Sharoikin

из коробки нет. Надо самому что-то костылить или использовать готовые библиотеки. Например эту.

Описывать установку и настройку не буду. Все есть в документации.

В models.py в translations нужно добавить все поля которые будут переводиться.

from parler.models import TranslatableModel, TranslatedFields

class Article(TranslatableModel):
    translations = TranslatedFields(
        name_short      = models.CharField(max_length=100, verbose_name="Короткое название"),
        name_full       = models.CharField(max_length=300, verbose_name="Длинное название", null=True, blank=True),
        content_full    = models.TextField(verbose_name="Содержимое страницы", null=True, blank=True),
    )
    status          = models.BooleanField(verbose_name="Активна")
    date            = models.DateField(verbose_name="Дата",auto_now=False, auto_now_add=False)
    content_preview = models.TextField(verbose_name="Превью-текст", null=True, blank=True)
    ##
    page_url = models.CharField(max_length=100, verbose_name="URL")
    page_title = models.CharField(max_length=300, verbose_name="Title", null=True, blank=True)
    page_description = models.CharField(max_length=300, verbose_name="Desc", null=True, blank=True)
    page_keywords = models.CharField(max_length=300, verbose_name="Keys", null=True, blank=True)
    ##
    def __str__(self):
        return '%s' % (self.name_short)

В admin.py

from parler.admin import TranslatableAdmin

@admin.register(Article)
class CategoryAdmin(TranslatableAdmin):
    list_display = ['name_short','name_full','content_full']
→ Ссылка