2010-04-09 9 views

risposta

28

Se si desidera che gli utenti siano in grado di specificare la lingua, assicurarsi che LocaleMiddleware è abilitato:

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

Poi Django cercherà la preferenza lingua dell'utente in quell'ordine (vedi get_language_from_request in trans_real.py):

  1. in request.path_info, se vengono utilizzati i18n_patterns;
  2. request.session[settings.LANGUAGE_SESSION_KEY];
  3. request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  4. ogni lingua in request.META['HTTP_ACCEPT_LANGUAGE'], finché non viene trovato uno accettato;
  5. settings.LANGUAGE_CODE.

Quindi il modo più semplice per impostare la lingua in modo esplicito in sessione Django è di riscrivere request.session[settings.LANGUAGE_SESSION_KEY]:

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

grazie, ho fatto esattamente come prima, ma non ha funzionato, si è scoperto che ho usato un linguaggio etichetta non in lista LINGUE defualt, è fresco adesso. Grazie – icn

+4

Per non parlare del pratico ['django.views.i18n.set_language()'] (https://docs.djangoproject.com/en/1.2/topics/i18n/internationalization/#the-set-language- redirect-view) –

+0

ha funzionato grazie mille – suhailvs

14

E se si utilizzerà una versione >= Django 1.8. Ecco come potremmo usarlo:

+1

Funziona in modo più coerente poiché le impostazioni potrebbero non avere la proprietà 'LANGUAGE_SESSION_KEY' –

0

Considerare l'utilizzo di django.views.i18n.set_language(). Attivare questo punto di vista aggiungendo la seguente riga al URLconf:

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

Per comodità, Django è dotato di una vista, django.views.i18n.set_language(), che imposta la lingua preferenze di un utente e reindirizza a un determinato URL o, per predefinito, torna alla pagina precedente .

La vista si aspetta di essere richiamata tramite il metodo POST, con una serie di parametri nella richiesta. Se il supporto sessione è abilitato, la vista salva la lingua scelta nella sessione dell'utente. Altrimenti, salva la lingua scelta in un cookie di default denominato django_language. (Il nome può essere modificato attraverso l'impostazione LANGUAGE_COOKIE_NAME.)

Problemi correlati