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.
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
Recientes
- Gráfico de series temporales con Flask, Bootstrap y Chart.js
- Utilización de IPv6 con Microk8s
- Uso de Ingress para acceder a RabbitMQ en un clúster Microk8s
- Galería de vídeo simple con Flask, Jinja, Bootstrap y JQuery
- Programación básica de trabajos con APScheduler
- Un conmutador de base de datos con HAProxy y el HAProxy Runtime API
Más vistos
- Programación básica de trabajos con APScheduler
- Evitar el envío de mensajes duplicados a un sistema remoto
- LSTM optimización multipaso hyperparameter con Keras Tuner
- Documentación de un Flask RESTful API con OpenAPI (Swagger) utilizando APISpec
- Usando Python's pyOpenSSL para verificar los certificados SSL descargados de un host
- Celery, Redis y el (in)famoso ejemplo de tarea de correo electrónico