Django интернационализация: как переводить модели тезауруса? - PullRequest
0 голосов
/ 24 января 2020

Я использую интернационализацию в своем проекте. Я просто добавил модели тезауруса (ниже) с 2 classmethod и templatetags, чтобы вернуть метку в формах и шаблоне соответственно

Но мне интересно, как я могу перевести текстовую метку, содержащуюся в таблицах? Должен ли я перевести в таблицы и проверить язык браузера или что-то в этом роде?

Есть ли самый простой способ сделать это в Django?

models.py

# modèle thésaurus repris de l'étude Princesse (C Yao)
class Thesaurus(SafeDeleteModel):
    """ A class to create a thesaurus variable instance. """

    _safedelete_policy = SOFT_DELETE_CASCADE
    the_ide = models.AutoField(primary_key=True)
    the_lab = models.CharField("Libellé", max_length=150)
    log = HistoricalRecords()

    class Meta:

        db_table = 'adm_the'
        verbose_name_plural = 'Thesaurus'
        ordering = ['the_ide']

    def __str__(self):

        return f"{self.the_ide} : {self.the_lab}"

    @classmethod
    def options_list(cls, the_ide):
        """ return the list of response options for a thesaurus variable. """

        the = Thesaurus.objects.get(pk=int(the_ide))
        the_opts_set = OptionDeThesaurus.objects.filter(the=the)
        the_opts_list = [(opt.the_opt_cod, opt.the_opt_lab) for opt in the_opts_set]
        the_opts_list.insert(0, (None, ''))
        return the_opts_list

    @classmethod
    def option_label(cls, the_ide, the_opt_cod):
        """ Return an response option label. """

        the = Thesaurus.objects.get(pk=int(the_ide))
        the_opt = OptionDeThesaurus.objects.get(the=the, the_opt_cod=the_opt_cod)
        return the_opt.the_opt_lab


class OptionDeThesaurus(SafeDeleteModel):
    """ A class to create a response option instance for a thesaurus variable. """

    _safedelete_policy = SOFT_DELETE
    the_opt_ide = models.AutoField(primary_key=True)
    the = models.ForeignKey(Thesaurus, verbose_name='Thesaurus', related_name='options',
        on_delete=models.CASCADE) # realated thesaurus viariable
    the_opt_cod = models.IntegerField("Code") # Response Option Code
    the_opt_lab = models.CharField("Libellé", max_length=100)
    log = HistoricalRecords()

    class Meta:

        db_table = 'adm_the_opt'
        verbose_name = 'Options de réponses'
        ordering = ['the','the_opt_cod']

    def __str__(self):

        return f"{self.the_opt_cod} : {self.the_opt_lab} / {self.the.the_lab}"

templatetags.py

from django import template
from parameters.models import Thesaurus, OptionDeThesaurus

register = template.Library()

@register.simple_tag
def option_label(the_ide, the_opt_cod, *args, **kwargs):
    try :
        return Thesaurus.option_label(int(the_ide), int(the_opt_cod))
    except:
        return ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...