【问题标题】:Django: get_language in settings.pyDjango:settings.py 中的 get_language
【发布时间】:2011-03-18 12:53:50
【问题描述】:

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

因为管理员需要是英文的。

谁能帮忙?

谢谢!

【问题讨论】:

    标签: django


    【解决方案1】:

    对于我自己的这类项目,我使用自己的 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
    

    【讨论】:

      【解决方案2】:

      我想它不会像你试图解决它的方式那样工作。我将设置在您的登录重定向上调用的视图,并在此视图中确定语言设置等,然后再次重定向到正确的视图 + 正确的语言环境设置!

      【讨论】:

      • 我已经试过了,但没有成功:(我再看看,看看能不能用其他方法解决。谢谢。
      【解决方案3】:

      我使用的翻译是:http://code.google.com/p/django-transmeta/,它非常适合我使用 3 种语言和 14 个位置。看看吧,可能会带你去某个地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 2016-09-05
        相关资源
        最近更新 更多