angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Revisado en varios idiomas y un pie de página con enlaces en varios idiomas.

Mantenga el título y el slug traducidos en un solo lugar y márquelos como válidos para que puedan ser utilizados incluso si el resto del elemento no es válido.

14 septiembre 2019
post main image
unsplash.com/@olidale

Antes de seguir leyendo, puede que quieras leer mi artículo anterior sobre la retirada del lenguaje, ver el enlace de abajo. Aquí tienes un ejemplo de la complejidad del multilingüismo. El enlace debe mostrarse en el idioma que está utilizando en este momento.... en otro momento.

La vida es una larga secuencia de problemas que estamos resolviendo todo el tiempo. Comienza con la obtención de suficiente oxígeno, resuelto por la respiración, tal vez en segundo lugar son los errores y la arquitectura incompleta a la hora de ser un desarrollador y programador. De todos modos, ya era hora de implementar un pie de página multilingüe, esta es la parte inferior de la página con enlaces a páginas como Acerca de, Contacto, Términos de uso, Política de privacidad. Para que un sitio web sea verdaderamente multilingüe, estos enlaces deben estar en el idioma seleccionado.

Empecé con dos tablas y creé una nueva parte del administrador para gestionarlas:

Pie de páginaPie de páginaPie de páginaPunto de
páginaTraducción

Usando el administrador creo un ítem de pie de página y le agrego uno o más registros de idioma, para cada idioma se agrega un registro de traducción. Lo primero que pensé fue especificar el nombre y el slug de una página aquí, es decir, una página puede no estar disponible en el idioma seleccionado y queremos volver al idioma alternativo. El nombre del enlace traducido (título de la página) y el slug deben ser almacenados en algún lugar.

Sin embargo, al construir la consulta para seleccionar las páginas me pareció demasiado compleja porque ahora no sólo tenía que consultar las tablas content_item y content_item sino también las tablas footer_item y footer_item_translation. No es exactamente lo que tenía en mente, soy programador y prefiero KISS.

Mi solución para reducir la complejidad es volver a abusar del registro de traducción content_item_translation, la última vez que añadí la bandera 'do_not_fallback' y ahora añado otra bandera: 'can_use_slug'. El significado es el siguiente:

  • Cuando el registro content_item_translation no existe, se recurre al lenguaje alternativo.
  • Cuando el registro content_item_translation existe y se publica, lo utilizamos.
  • Cuando el registro de traducción content_item_translation existe pero no se publica, tenemos dos condiciones: - do_not_fallback
    , si es True, el elemento no está disponible.
    - can_use_slug, si do_not_fallback es False, y can_use_slug es True podemos usar el título y el slug del registro de traducción content_item_translation.

Lo bueno es que ahora podemos construir un verdadero pie de página multilingüe, con enlaces multilingües incluso si la página no está publicada, sólo traduciendo y añadiendo el título y la slug de la página al registro content_item_translation y estableciendo la bandera can_use_slug. El título y el slug de la página están en un solo lugar.

Una ventaja es que también podemos usar esto cuando mostramos la página para mostrar el título de la página en el idioma seleccionado, mientras que las otras partes permanecen en inglés. Puede comprobarlo consultando la página de Condiciones de uso de este sitio web en varios idiomas. Esta página sólo está disponible en inglés, pero todavía tenemos enlaces multilingües en el pie de página y un título multilingüe.

La implementación es como el objeto cache y el objeto de configuración descritos en los posts anteriores y por supuesto utiliza caching, sin necesidad de generar el pie de página de cada petición. No hay código en este post, debe hacer alguna limpieza primero ....

Enlaces / créditos

Refining multilanguage: adding language fallback as an option
/en/blog/refining-multilanguage-adding-language-fallback-as-an-option

Leer más

Multilanguage

Deje un comentario

Comente de forma anónima o inicie sesión para comentar.

Comentarios

Deje una respuesta.

Responda de forma anónima o inicie sesión para responder.