如何在 DJango 中翻译模型查询中的所有内容?
How to translate all the contents inside model queries in DJango?
我是 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
里面没有添加任何东西
拜托,有人知道如何解决这个问题吗??
我认为在不使用任何第三方的情况下翻译 Post 模型内容的最佳方法是为每个需要在模型中翻译的字段创建不同的语言,并从管理员那里翻译它们,并在网站更改语言时在模板中显示它们,在 Django 中,您只能翻译文本,不能翻译模型中的数据
创建模型Post
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 的新手,我正在尝试用两种不同的语言制作一个小型博客,我在我的博客中获得了所有翻译,包括管理员,但仍然不不知道怎么翻译我帖子的内容。
在我使用 模型查询 获取内容后,在我的模板中我曾经输入这个 {% 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
里面没有添加任何东西拜托,有人知道如何解决这个问题吗??
我认为在不使用任何第三方的情况下翻译 Post 模型内容的最佳方法是为每个需要在模型中翻译的字段创建不同的语言,并从管理员那里翻译它们,并在网站更改语言时在模板中显示它们,在 Django 中,您只能翻译文本,不能翻译模型中的数据
创建模型Post
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 %}
希望对您有所帮助