Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

268
Visualizações
Menú traducible personalizado de Wagtail

Soy nuevo en wagtail y estoy trabajando con un menú personalizado. Configuré una clase de menú personalizada y uso una etiqueta para mostrar los elementos del menú en las plantillas. Esto funciona bien, sin embargo, necesitaría crear diferentes menús según el idioma en el que se use mi sitio. (Sé que existe wagtailmenus, sin embargo, tampoco pude encontrar una manera satisfactoria de crear menús traducidos allí)

Quería crear una experiencia de traducción similar a la que hace wagtail-localize con las páginas. ¿Es esto posible o tengo que tomar un enfoque diferente?

Ya traté de usar wagtails TranslatableMixin para simplemente crear duplicados de mi menú con diferentes traducciones, sin embargo, esto no parece funcionar, porque falta la opción de traducción (como se hace con las páginas).

Clases:

 class Menu(TranslatableMixin, ClusterableModel): title = models.CharField(max_length=100) logo = models.ForeignKey("wagtailimages.Image", blank=True, null=True, on_delete=models.SET_NULL, related_name="menu_logo") image = models.ForeignKey("wagtailimages.Image", blank=True, null=True, on_delete=models.SET_NULL, related_name="menu_image") slug = AutoSlugField(populate_from="title", editable=True) panels = [ MultiFieldPanel( [ FieldPanel("title"), FieldPanel("slug"), ImageChooserPanel("logo"), ImageChooserPanel("image"), ], heading="Menu", ), InlinePanel("menu_items", label="Menu Item"), ] def __str__(self): return self.title class Meta(TranslatableMixin.Meta): verbose_name = "Menu" class MenuItem(ClusterableModel, AbstractMenuItem): page = ParentalKey("Menu", related_name="menu_items") class Meta: verbose_name = "Menu Item"

Etiquetas de plantilla:

 @register.simple_tag() def get_menu(slug, authencicated): menu = Menu.objects.get(slug=slug) all_menu_items = menu.menu_items.all() menu_items = [] for item in all_menu_items: if item.show(authencicated): menu_items.append(item) return {"logo": menu.logo, "image": menu.image, "items": menu_items}

modelo:

 {% get_menu "main-menu" request.user.is_authenticated as menu%}
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Aquí hay formas de abordar esto "manualmente" sin paquetes adicionales. En primer lugar, compruebe dos veces su configuración .

Por un lado, puede agregar un título traducido a los modelos de página que está enumerando en estos menús. Llámalo title_en , por ejemplo.

Por otro lado, podría agregar estos campos directamente a su clase MenuItem :

 class MenuItem(ClusterableModel, AbstractMenuItem): page = ParentalKey("Menu", related_name="menu_items") title_en = models.CharField(max_length=32, verbose_name="English Title") title_zh = models.CharField(max_length=32, verbose_name="Chinese Title") class Meta: verbose_name = "Menu Item"

En la plantilla puede identificar el idioma actual y elegir el menú en consecuencia. Esto también funciona a través de una etiqueta de plantilla (pasando el código de idioma u obteniendo el código de idioma dentro de la etiqueta de plantilla).

 {% load i18n %} {% get_current_language as current_language_code %} # You could either pass the current_language_code to your template tag: {% get_menu('slug', current_language_code) %} # Or use multiple template tags: {% if current_language_code == 'zh' %} {% get_chinese_menu %} {% else %} {% get_english_fallback_menu %} {% endif %}

También puede obtener el código de idioma actual en su templatetags.py:

 from django.utils.translation import get_language @register.simple_tag() def get_menu(slug, ...): current_language_code = get_language() if current_language_code == 'zh': ... else: ...

Podría usar una etiqueta de plantilla personalizada adicional para traducir los elementos del menú si la estructura del menú es idéntica:

 from django.utils.translation import get_language @register.simple_tag() def get_translated_title(item): current_language_code = get_language() if current_language_code == 'zh': return item.title_zh return item.title_en # fallback
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda