2011-11-06 45 views
0

我需要設置用戶語言2例:在語言用戶登錄

  1. 用戶登錄(Django的檢查他的語言字段值用戶配置領域,並設置適當的郎)
  2. 用戶在「用戶首選項」頁面輸入lang。

我試過用 「user_logged_in」 信號接收器

from django.utils import translation 
from django.dispatch import receiver 
from django.contrib.auth.signals import user_logged_in 

@receiver(user_logged_in) 
def setlang(sender, **kwargs): 
    translation.activate(kwargs['user'].get_profile().language) 
    kwargs['request'].session['django_language'] = translation.get_language() 

,直到我重新啓動我的Django的情況下也能正常工作。雖然會話存活(無需再次登錄)網站被顯示在settings.LANGUAGE指定

我認爲同樣的語言適用於情況#2(用戶喜好保存表單())

回答

1

我認爲如果you use middleware to achieve this更好。 Django提供了一種在請求中的各個位置添加鉤子的方法,以便您可以添加自定義代碼。

就你的情況:檢查每個請求是否有會話中的語言變量,如果沒有,從數據庫中提取用戶語言首選項並將其保存到會話變量。檢查保存信號是否用戶更改了他們的偏好;如果是這樣,更新會話變量(您可能有問題從模型級別訪問請求,所以最好在視圖中執行此操作)。

+0

是啊...看起來像中間件是唯一的出路..但爲什麼不從會話中讀取語言? settings.LANGUAGE是django「搜索lang」優先級列表中的最後一個。謝謝 – Robert

+0

修復:'django.middleware.locale.LocaleMiddleware'被禁用...現在它的工作原理沒有translation.activate() – Robert