首页 > 解决方案 > 如何使用 django-modeltranslation 向模板添加翻译字段?

问题描述

我正在尝试使用 django-modeltranslation 翻译我的网页。我已经在提供的文档的帮助下完成了设置,但是在将模型翻译字段显示到模板时遇到了问题。你能帮我吗?

这是我所做的。

# settings.py
def gettext(s):
    return s


LANGUAGES = (
    ('en', gettext('English')),
    ('de', gettext('German')),
)

MODELTRANSLATION_TRANSLATION_FILES = (
    'main.translation',
)

在应用程序翻译.py 文件中

# project/app/translation.py

from modeltranslation.translator import translator, TranslationOptions
from .models import Post


class PostTranslationOptions(TranslationOptions):
    fields = ('title', 'description')


translator.register(Post, PostTranslationOptions)

项目 urls.py 文件。

# urls.py

from django.contrib import admin
from django.urls import path, include
import debug_toolbar
from django.conf.urls.i18n import i18n_patterns

urlpatterns = [
    path('admin/', admin.site.urls)

]
urlpatterns += [
    path(r'^__debug__/', include(debug_toolbar.urls)),
]

urlpatterns += i18n_patterns(path('', include('main.urls')))

视图.py

# views.py
def ceo_dashboard(request):
    post = Post.objects.all().select_related()
    return render(request, 'main/dashboard_page.html', {'user': request.user, 'Posts': post})

模板文件

 <h2 style="color:#0B2161;" >{{ post.title }}</h2>
 <hr>
 <p>{{ post.description }}</p>
 <h5>Uploaded by : {{post.user}}</h5>
 <hr>

现在我不知道如何将这些字段显示到模板中。

标签: pythondjangolocalizationinternationalizationdjango-modeltranslation

解决方案


您还需要添加一个名为 LocaleMiddleware 的中间件,它会为您的项目激活翻译:

MIDDLEWARE = [
   # ....
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.locale.LocaleMiddleware', # THIS ONE
   'django.middleware.common.CommonMiddleware',
]

在此处的 Django 文档中阅读有关它的更多信息:Django 如何发现语言偏好

之后,您还需要在主模板中添加语言重定向器:

{% load i18n %}

<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}">
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go">
</form>

现在您可以转到您的管理员并添加帖子,其中 django 管理员要求在指定字段的适当表单中输入不同的翻译(在您的情况下,“标题”,“描述”)

希望这可以帮助您解决问题!


推荐阅读