Я работаю над интернационализацией моего проекта. Есть что-то, чего я не понимаю, даже читая документацию Django

У меня есть вид, где я передаю контекст (список)

В моем шаблоне я зацикливаюсь на этом списке и запускаю метод для каждого элемента моего списка, этот метод возвращает строку ('string # 1' или 'string # 2' в зависимости от элемента)

Я хотел бы перевести (en / fr), но я не понял, как это сделать? Должен ли я применить перевод в моих моделях или в шаблоне?

Ниже приведен упрощенный код для примера

Models.py

class mymodel(models.Model)
    def mymethod(self):
        condition = othermodel.objects.get(pk=self.ide)
        if condition == 1 :
            return 'string#1' # the string I want to translate
        else:
            return 'string#2' # the string I want to translate
        return ''

Views.py

def test(request):
    mylist= _(["elt#1","elt#2","elt#3","elt#4","elt#5"])
    return render(request, 'myapp/test.html', {'mylist': mylist})

Test.html

{% for element in mylist %}
    {{ element.mymethod }}
{% endfor %}
0
SLATER 5 Дек 2019 в 11:04

1 ответ

Вы можете выбрать один из вариантов

Если вы хотите перевести в модель

from django.utils.translation import ugettext_lazy as _

class mymodel(models.Model)
    def mymethod(self):
        condition = othermodel.objects.get(pk=self.ide)
        if condition == 1 :
            return _('string#1') # the string I want to translate
        else:
            return _('string#2') # the string I want to translate
        return ''

Если вы хотите перевести в вид

from django.utils.translation import ugettext as _

def test(request):
    mylist= [_("elt#1"), _("elt#2"), _("elt#3"), _("elt#4"), _("elt#5")]
    return render(request, 'myapp/test.html', {'mylist': mylist})

Если вы хотите перевести в шаблон

{% load i18n %}

{% for element in mylist %}
    {% trans element.mymethod %}
{% endfor %}
0
Jacek B Budzynski 5 Дек 2019 в 11:36