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 next
debe 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:
Cambiar idioma como botón:
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.
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
elemento.
Si en su sistema actual solo tiene 2 idiomas, simplemente use como se muestra a continuación:
% ifequal LANGUAGE_CODE "en" %
Spanish
% else %
English
% endifequal %
No es necesario un formulario, URL y envío, etc. Funcionó para mí.