2011-11-06 60 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