如何翻译DJango中模型查询中的所有内容?

时间:2018-04-20 13:42:13

标签: django django-i18n

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

在我使用模型查询获取内容后,在我的模板中,我曾经键入此{% trans "SOME TEXT" %}并且它工作正常,我从数据库获取的变量我正在使用这段代码:

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

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

同样在我的 views.py 中,我尝试了这个:

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

django.po

中没有添加任何内容

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

1 个答案:

答案 0 :(得分: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 %}

希望能帮到你