Я использую интернационализацию в своем проекте. Я просто добавил модели тезауруса (ниже) с 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 ''