Wagtail 번역된 탐색 메뉴

웹사이트에서 다국어 콘텐츠를 처리할 때 탐색 메뉴가 현지 언어로 표시되지 않을 수 있습니다.

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

최근 Wagtail Localize 플러그인을 사용하여 콘텐츠를 다양한 언어로 번역할 때 문제가 발생했습니다. 페이지는 잘 번역되었지만 상단 탐색 메뉴는 항상 기본 언어로 유지되었습니다.

그 문제를 너무 오랫동안 조사한 후 마침내 해결책을 찾았고 다른 사람이 같은 문제에 직면할 경우를 대비하여 문서화하고 싶었습니다.

이것은 이전에 base/templatetags/navigation_tags.py의 내용이었습니다.

from django import template
from wagtail.core.models import Page, Site
from mybase.base.models import FooterText
 
 
register = template.Library()
# https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/
 
 
@register.simple_tag(takes_context=True)
def get_site_root(context):
    # This returns a core.Page. The main menu needs to have the site.root_page
    # defined else will return an object attribute error ('str' object has no
    # attribute 'get_children')
    return Site.find_for_request(context['request']).root_page
 
 
def has_menu_children(page):
    # This is used by the top_menu property
    # get_children is a Treebeard API thing
    # https://tabo.pe/projects/django-treebeard/docs/4.0.1/api.html
    return page.get_children().live().in_menu().exists()
 
...

그리고 이것은 templates/tags/top_menu.html의 내용이었습니다.

{% load navigation_tags wagtailcore_tags %}
{% get_site_root as site_root %}
 
{% for menuitem in menuitems %}
  <li class="presentation {{ menuitem.title|lower|cut:" " }}{% if menuitem.active %} active{% endif %}{% if menuitem.show_dropdown %} has-submenu{% endif %}">
      {% if menuitem.show_dropdown %}
          <a href="{% pageurl menuitem %}" class="allow-toggle">{{ menuitem.title }} <span><a class="caret-custom dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"></a></span></a>
              {% top_menu_children parent=menuitem %}
              {# Used to display child menu items #}
      {% else %}
          <a href="{% pageurl menuitem %}" role="menuitem">{{ menuitem.title }}</a>
      {% endif %}
  </li>
{% endfor %}

다른 솔루션이 있을 수 있으며 평소와 같이 실제 수정 사항은 특정 Wagtail 구현에 크게 의존하지만 저를 위한 수정 사항은 base/templatetags/navigation_tags.py를 변경하여 요청 언어와 일치하는 페이지를 검색하는 것이었습니다.

from django import template
from wagtail.models import Page, Site
from mybase.base.models import FooterText
from wagtail.core.models import Locale
 
 
register = template.Library()
# https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/
 
 
@register.simple_tag(takes_context=True)
def get_site_root(context):
    # This returns a core.Page. The main menu needs to have the site.root_page
    # defined else will return an object attribute error ('str' object has no
    # attribute 'get_children')
    request = context['request']
    language = request.LANGUAGE_CODE
    locale = Locale.objects.get(language_code=language)
    return Site.find_for_request(context['request']).root_page.get_translation(locale)
 
...
댓글을 게시했습니다: 0

Tagged with:
Wagtail