2010-04-09 10 views

Respuesta

28

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):

  1. en request.path_info, si se utilizan i18n_patterns;
  2. request.session[settings.LANGUAGE_SESSION_KEY];
  3. request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  4. todos los idiomas en request.META['HTTP_ACCEPT_LANGUAGE'], hasta que se acepte uno;
  5. 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' 
    ... 
+0

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

+4

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 –

+0

funcionó muchas gracias – suhailvs

14

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' 
+1

Esto funciona de manera más consistente ya que la configuración puede no tener la propiedad 'LANGUAGE_SESSION_KEY' –

0

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ón LANGUAGE_COOKIE_NAME.)

Cuestiones relacionadas