2010-04-09 2 views

Répondre

28

Si vous voulez que vos utilisateurs soient en mesure de préciser la langue, assurez-vous que LocaleMiddleware est activé:

MIDDLEWARE_CLASSES = (
    ... 
    'django.middleware.locale.LocaleMiddleware', 
    ... 
) 

Django cherchera la préférence de langue de l'utilisateur cet ordre (voir get_language_from_request en trans_real.py):

  1. dans request.path_info, si i18n_patterns sont utilisés;
  2. request.session[settings.LANGUAGE_SESSION_KEY];
  3. request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  4. chaque langue dans request.META['HTTP_ACCEPT_LANGUAGE'], jusqu'à ce que l'un accepté est trouvé;
  5. settings.LANGUAGE_CODE.

Ainsi, la manière la plus simple de définir la langue explicitement en session Django est de réécrire request.session[settings.LANGUAGE_SESSION_KEY]:

def someview (request): 
    ... 
    request.session[settings.LANGUAGE_SESSION_KEY] = 'en' 
    ... 
+0

merci, je l'ai fait exactement comme ça avant, mais ça ne fonctionnait pas, il est avéré que j'ai utilisé une étiquette de langue pas dans la liste des LANGUES defualt, il est cool à présent. Merci – icn

+4

Sans oublier le pratique ['django.views.i18n.set_language()'] (https://docs.djangoproject.com/fr/1.2/topics/i18n/internationalization/#the-set-language- redirect-view) builtin view –

+0

cela a beaucoup fonctionné merci – suhailvs

14

Et si vous utilisez une version >= Django 1.8. Voici comment nous pourrions utiliser cela:

from django.utils.translation import LANGUAGE_SESSION_KEY 

def someview (request): 
    ... 
    request.session[LANGUAGE_SESSION_KEY] = 'en' 
+1

Cela fonctionne de manière plus cohérente car les paramètres peuvent ne pas avoir la propriété 'LANGUAGE_SESSION_KEY' –

0

Envisagez d'utiliser django.views.i18n.set_language(). Activez ce point de vue en ajoutant la ligne suivante à votre URLconf:

# This example makes the view available at /i18n/setlang/ 
url(r'^i18n/', include('django.conf.urls.i18n')), 

Par commodité, Django est livré avec une vue, django.views.i18n.set_language(), qui définit la langue de préférence d'un utilisateur et redirige vers une URL donnée ou, par par défaut, retour à la page précédente.

La vue doit être appelée via la méthode POST, avec un jeu de paramètres de langue dans la demande. Si le support de session est activé, la vue enregistre le choix de la langue dans la session de l'utilisateur. Sinon, il enregistre le choix de langue dans un cookie par défaut nommé django_language. (Le nom peut être modifié par le LANGUAGE_COOKIE_NAME réglage.)

Questions connexes