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
- Cómo ocultar las claves primarias de la base de datos UUID de su aplicación web
- Don't Repeat Yourself (DRY) con Jinja2
- SQLAlchemy, PostgreSQL, número máximo de filas por user
- Mostrar los valores en filtros dinámicos SQLAlchemy
- Transferencia de datos segura con cifrado de Public Key y pyNaCl
- rqlite: una alternativa de alta disponibilidad y dist distribuida SQLite
Más vistos
- Usando Python's pyOpenSSL para verificar los certificados SSL descargados de un host
- Usando UUIDs en lugar de Integer Autoincrement Primary Keys con SQLAlchemy y MariaDb
- Conectarse a un servicio en un host Docker desde un contenedor Docker
- Usando PyInstaller y Cython para crear un ejecutable de Python
- SQLAlchemy: Uso de Cascade Deletes para eliminar objetos relacionados
- Flask RESTful API validación de parámetros de solicitud con esquemas Marshmallow