【问题标题】:How to add translation fields to templates using django-modeltranslation?如何使用 django-modeltranslation 向模板添加翻译字段?
【发布时间】:2020-11-05 17:18:38
【问题描述】:

我正在尝试使用 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')))

Views.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>

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

【问题讨论】:

    标签: python django localization internationalization django-modeltranslation


    【解决方案1】:

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

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

    在此处的 Django 文档中了解更多信息:How Django discovers language preference

    之后,您还需要在主模板中添加language re-directer

    {% 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 管理员要求在指定字段的适当表单中输入不同的翻译(在您的情况下为“标题”、“描述”)

    希望这能帮助您解决问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-16
      • 2016-04-10
      • 2012-12-30
      • 2015-09-05
      • 2018-04-22
      • 2018-01-30
      • 2018-09-24
      • 2020-08-29
      相关资源
      最近更新 更多