2010-04-09 45 views

回答

28

如果您想讓您的用戶能夠指定語言,確保LocaleMiddleware啓用:

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

然後Django會查找用戶的語言首選項該順序(參見get_language_from_requesttrans_real.py):

  1. request.path_info,如果使用i18n_patterns;
  2. request.session[settings.LANGUAGE_SESSION_KEY];
  3. request.COOKIES[settings.LANGUAGE_COOKIE_NAME];
  4. 每種語言在request.META['HTTP_ACCEPT_LANGUAGE'],直到找到一個被發現;
  5. settings.LANGUAGE_CODE

所以要在Django會議明確設置的語言最簡單的方法是重寫request.session[settings.LANGUAGE_SESSION_KEY]

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

感謝(該名稱可以通過 LANGUAGE_COOKIE_NAME設置進行更改。),我之前完全一樣,但它沒有工作,原來我用不defualt語言列表語言的標籤,這是很酷現在。 謝謝 – icn 2010-04-09 17:34:19

+4

更不用說了['django.views.i18n.set_language()'](https://docs.djangoproject.com/en/1.2/topics/i18n/internationalization/#the-set-language- redirect-view)內建視圖 – 2012-08-24 08:40:38

+0

它的工作非常感謝 – suhailvs 2013-07-26 11:11:30

14

如果你將使用一個版本>= Django 1.8。這裏是我們如何使用它:

from django.utils.translation import LANGUAGE_SESSION_KEY 

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

由於設置可能沒有「LANGUAGE_SESSION_KEY」屬性 – 2016-09-26 19:23:13

0

考慮使用django.views.i18n.set_language()。通過添加以下行到你的URLconf激活這一觀點:

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

爲方便起見,Django自帶了一個觀點, django.views.i18n.set_language(),即設置一個用戶的語言 偏好並重定向到指定的URL,或者通過默認回到上一頁的 。

該視圖期望通過POST方法調用,並在請求中設置語言 參數。如果啓用了會話支持,則視圖 將在用戶會話中保存語言選項。否則,它會將默認名爲 django_language的Cookie中的語言選擇保存爲 。