¿Cómo se establece explícitamente django_language
en la sesión Django
?Cómo establecer explícitamente django_language en la sesión de django
Muchas gracias ...
¿Cómo se establece explícitamente django_language
en la sesión Django
?Cómo establecer explícitamente django_language en la sesión de django
Muchas gracias ...
Si desea que los usuarios puedan especificar el idioma, asegúrese de que está habilitado LocaleMiddleware
:
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
...
)
Entonces Django buscará la preferencia de idioma del usuario en ese orden (ver get_language_from_request
en trans_real.py):
request.path_info
, si se utilizan i18n_patterns;request.session[settings.LANGUAGE_SESSION_KEY]
;request.COOKIES[settings.LANGUAGE_COOKIE_NAME]
;request.META['HTTP_ACCEPT_LANGUAGE']
, hasta que se acepte uno;settings.LANGUAGE_CODE
.Así que la forma más sencilla de configurar el idioma de forma explícita en la sesión de Django es reescribir request.session[settings.LANGUAGE_SESSION_KEY]
:
def someview (request):
...
request.session[settings.LANGUAGE_SESSION_KEY] = 'en'
...
Y si va a utilizar una versión >= Django 1.8
. Aquí es cómo podríamos usar eso:
from django.utils.translation import LANGUAGE_SESSION_KEY
def someview (request):
...
request.session[LANGUAGE_SESSION_KEY] = 'en'
Esto funciona de manera más consistente ya que la configuración puede no tener la propiedad 'LANGUAGE_SESSION_KEY' –
Considere el uso de django.views.i18n.set_language(). Activar este punto de vista, añadiendo la siguiente línea a tu URLconf:
# This example makes the view available at /i18n/setlang/
url(r'^i18n/', include('django.conf.urls.i18n')),
para su conveniencia, Django incluye una vista,
django.views.i18n.set_language()
, que establece la preferencia de idioma de un usuario y redirige a una URL determinada o, por predeterminado, volver a la página anterior .La vista espera ser llamada a través del método POST, con un parámetro de idioma establecido en la solicitud. Si el soporte de sesión está habilitado, la vista guarda la selección de idioma en la sesión del usuario. De lo contrario, guarda la elección del idioma en una cookie que se llama por defecto
django_language
. (El nombre se puede cambiar a través de la configuraciónLANGUAGE_COOKIE_NAME
.)
gracias, lo hice exactamente como esto antes, pero que no funcionó, resultó que he usado una etiqueta de idioma no está en la lista IDIOMAS defualt, es fresco ahora. Gracias – icn
Por no mencionar el práctico ['django.views.i18n.set_language()'] (https://docs.djangoproject.com/en/1.2/topics/i18n/internationalization/#the-set-language- redirect-view) vista integrada –
funcionó muchas gracias – suhailvs