【问题标题】:How to translate all the contents inside model queries in DJango?如何在 DJango 中翻译模型查询中的所有内容?
【发布时间】:2018-04-20 13:42:12
【问题描述】:

我是 Django 的新手,我正在尝试用两种不同的语言创建一个小型博客,我在博客中获得了包括管理员在内的所有翻译,但仍然不知道如何翻译我的帖子内容。

在我使用 models 查询 获取内容后,在我的模板中,我曾经输入此 {% trans "SOME TEXT" %},它工作得很好,我使用的是从数据库获取的变量,我正在使用此代码:

{% blocktrans %}
    {{head.title_text}}
{% endblocktrans %}

现在,当我在 django.po 中键入 django-admin makemessages -l ru 时,我看不到任何已添加的新文本。

在我的 views.py 中我也试过这个:

head = Head.objects.first()
trans_h = _(u'{}'.format(head))

django.po

内没有添加任何内容

请问有谁知道如何解决这个问题??

【问题讨论】:

  • 这不是问题,您无法翻译数据库中的内容
  • @Goran,感谢您的关注。那么有什么方法可以翻译内容吗?
  • 也许我必须为每个内容创建两个字段,例如 en_content 和 ru_content 并根据博客的激活语言,我将显示它们??
  • 是的,就是这样

标签: django django-i18n


【解决方案1】:

我认为在不使用任何第三方的情况下翻译 Post Model 内容的最佳方式是为您需要在模型中以不同语言翻译的每个字段创建并从您的管理员处翻译它们,并将它们显示在您的网站更改语言时的模板,在 Django 中,您只能翻译文本,不能翻译模型中的数据

创建您的模型帖子

models.py

class Post(models.Model)
    title_fr   = models.CharField(max_length=200)
    title_en   = models.CharField(max_length=200)
    content_fr = models.TextField()
    content_en = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True,   auto_now=False)
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)

在视图中翻译变量内的文本并将其传递到模板中

views.py

from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse
from .models import Post 
from django.utils.translation import ugettext_lazy as _

def post_view(request):
    post = Post.objects.all()
    
    # Here is you can translate the text in python 
    title = _("les meilleurs posts du mois")
    
    context = {
     'post':post,
     'title':title
    }
    template = loader.get_template('index.html')
    return HttpResponse(template.render(context, request))

这里的想法是,一旦您的网站在您的模板中翻译成法语(例如www.mysite.com/fr/),您将只获得已在您的管理员中翻译的 _fr(title_fr, content_fr) 的属性,如果它是英文的,它将是一样的东西

index.html


{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_available_languages as LANGUAGES %}

<h1> {{ title}}</h1>

{% if LANGUAGE_CODE|language_name_translated == 'Français' %}
{% for items in home %}
<h2>{{ items.title_fr }}</h2>
<p> {{items.content_fr}}</p>
{% endfor %}

{% if LANGUAGE_CODE|language_name_translated == 'English' %}
{% for items in home %}
 <h2>{{ items.title_en }}</h2>
 <p>{{items.content_en}}</p>
{% endfor %}
{% endif %}

希望对你有帮助

【讨论】:

  • 是否可以将这些值传递给 django rest 框架?
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2017-12-14
  • 2015-10-08
  • 1970-01-01
  • 2014-12-20
  • 2016-11-29
  • 2015-06-06
相关资源
最近更新 更多