【问题标题】:Django/i18n: how to translate method result in a template?Django/i18n:如何在模板中翻译方法结果?
【发布时间】:2019-12-05 08:04:51
【问题描述】:

我正在致力于我的项目的国际化。 有些东西我连看 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 %}

【问题讨论】:

  • 如果您想使用 i18n 方式,Jacek 的回答很好,另一个选项是 django-modeltranslation package 它允许在 django 模型端应用翻译,因此在实现例如 API、前端和数据库

标签: django methods internationalization


【解决方案1】:

您可以选择其中一个选项

如果你想在model中翻译

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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多