Saltar al contenido

Problema al intentar cambiar el idioma de la plantilla de Django

Recuerda que en las ciencias cualquier problema puede tener diferentes resoluciones, por lo tanto nosotros aquí enseñaremos lo mejor y más eficiente.

Solución:

Después de más pruebas y gracias a la pregunta relacionada vinculada por @AronYsidoro, finalmente encontré el problema y una solución muy simple que realmente resuelve esto.

Primero, permítanme explicar el problema: cuando se trabaja con i18_patterns en tus urls.py para anteponer el código de idioma, si llama a la URL set_language para cambiar el idioma sin especificar next, por defecto es el actual, ¡pero con el código de idioma antiguo añadido! Entonces, ¡el idioma vuelve al original! Y, si especifica explícitamente nextdebe asegurarse de no incluir el código de idioma al principio.

Si utiliza request.path o request.get_full_path para especificar el next como la página actual, esto no funcionará ya que también devuelve el código de idioma.

Entonces, ¿cómo eliminamos este código de idioma no deseado para volver a cargar la página actual con el idioma cambiado al usar i18n_patterns? ¡Fácil, solo tenemos que cortar los 3 primeros caracteres (la barra oblicua y los dos caracteres del código de idioma)!

Aquí tienes dos ejemplos. El primero en forma de select (con los idiomas como opciones) y el otro en forma de botón (por idioma).

Realmente espero que esto ayude a alguien más. Simplemente puede copiar y pegar el código y debería funcionar. Sin embargo, si usa el “formulario de botón”, ¡solo tiene que configurar el idioma que desee!

Cambiar idioma de la lista:

% csrf_token %

Cambiar idioma como botón:

% csrf_token %

Un resumen de las posibles opciones:

Cambiar el idioma de la sesión del usuario con un select

Hay una excelente descripción extensa con un ejemplo en los documentos de Django.

Cambiar el idioma de la sesión del usuario con botones

No es necesario repetir un formulario para cada botón como sugirió @Caumons, sino que simplemente puede incluir tantos botones en el formulario como idiomas.

% csrf_token %

Sin duda, puede diseñar los botones para que parezcan enlaces o lo que sea.

Cambiar el idioma que se muestra con los enlaces

Si no se requiere que se cambie el idioma predeterminado de la sesión de usuario, se pueden usar enlaces simples para cambiar el contenido:


SEO

No estoy del todo seguro de que el contenido sea compatible con SEO si se usa un formulario para cambiar el idioma de la sesión, como recomienda Django. Por lo tanto, es posible que el enlace el marcado se agrega como oculto debajo del