Django:settings.py中的get_language

时间:2011-03-18 12:53:50

标签: django

我使用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'

因为管理员需要使用英语。

有人可以帮忙吗?

谢谢!

3 个答案:

答案 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种位置。检查一下,可能会带你到某个地方。