65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
"""Translation app models."""
|
|
from django.contrib.postgres.fields import JSONField
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from utils.models import ProjectBaseMixin, LocaleManagerMixin
|
|
|
|
|
|
class LanguageQuerySet(models.QuerySet):
|
|
"""QuerySet for model Language"""
|
|
|
|
def by_locale(self, locale: str) -> models.QuerySet:
|
|
"""Filter by locale"""
|
|
return self.filter(locale=locale)
|
|
|
|
def by_title(self, title: str) -> models.QuerySet:
|
|
"""Filter by title"""
|
|
return self.filter(title=title)
|
|
|
|
|
|
class Language(models.Model):
|
|
"""Language model."""
|
|
|
|
title = models.CharField(max_length=255,
|
|
verbose_name=_('Language title'))
|
|
locale = models.CharField(max_length=10,
|
|
verbose_name=_('Locale identifier'))
|
|
|
|
objects = LanguageQuerySet.as_manager()
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
|
|
verbose_name = _('Language')
|
|
verbose_name_plural = _('Languages')
|
|
unique_together = ('title', 'locale')
|
|
|
|
def __str__(self):
|
|
"""String method"""
|
|
return f'{self.title} ({self.locale})'
|
|
|
|
|
|
class SiteInterfaceDictionaryManager(LocaleManagerMixin):
|
|
"""Extended manager for SiteInterfaceDictionary model."""
|
|
|
|
|
|
class SiteInterfaceDictionary(ProjectBaseMixin):
|
|
"""Site interface dictionary model."""
|
|
|
|
page = models.CharField(max_length=255, db_index=True,
|
|
verbose_name=_('Page'))
|
|
keywords = models.CharField(max_length=255, verbose_name='Keywords')
|
|
text = JSONField(_('Text'), null=True, blank=True,
|
|
default=None, help_text='{"en-GB":"some text"}')
|
|
|
|
objects = SiteInterfaceDictionaryManager()
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
|
|
verbose_name = _('Site interface dictionary')
|
|
verbose_name_plural = _('Site interface dictionary')
|
|
|
|
def __str__(self):
|
|
return f'{self.page}: {self.keywords}'
|