我使用Django的身份验证系统实现了用户登录/注册,但是碰到了墙,希望有人可以帮助我。
本网站使用的是django-localeurl,目前以3种语言运行。
我在将登录重定向传递给正确的语言时遇到问题。 我想要做的是将当前语言传递给LOGIN_REDIRECT_URL变量(在settings.py中),以便代替:
LOGIN_REDIRECT_URL = '/accounts/my_account/'
我有类似的东西:
LOGIN_REDIRECT_URL = '/%s/accounts/my_account/' % request.LANGUAGE_CODE
当然不起作用,因为我没有将请求传递给settings.py。
有一种非常简单明智的方法吗?它总是默认为英语,这是一个大问题。如果用户以西班牙语查看该网站,一旦他们登录,他们将被重定向到英语:/
我的语言设置如下:
gettext = lambda s: s
LANGUAGES = (
('pt', gettext('Portuguese')),
('es', gettext('Spanish')),
('en', gettext('English')),
)
和
LANGUAGE_CODE = 'en'
因为管理员需要使用英语。
有人可以帮忙吗?
谢谢!
答案 0 :(得分:2)
对于我自己的那类项目,我使用自己的login_redirect装饰器而不是Django提供的装饰器,它总是将我发送到settings.py中定义的静态URL。我的i18n装饰器看起来像这样:
def i18n_login_required(function):
def wrap(request, *args, **kwargs):
if not request.user.is_authenticated():
return HttpResponseRedirect('/%s/accounts/login/?next=%s' % (get_language(), request.GET.get('next', urlquote(request.get_full_path()))))
return function(request, *args, **kwargs)
wrap.__doc__=function.__doc__
wrap.__name__=function.__name__
return wrap
答案 1 :(得分:1)
我想它不会像你试图解决它那样工作。我会设置在登录重定向上调用的视图,在此视图中确定语言设置等,然后再次重定向到正确的视图+正确的区域设置!
答案 2 :(得分:1)
我使用的翻译是http://code.google.com/p/django-transmeta/,它适用于3种语言和14种位置。检查一下,可能会带你到某个地方。