django翻译的URL和accept language标头

django翻译的URL和accept language标头,django,localization,translation,Django,Localization,Translation,我已经为一些语言设置了翻译过的URL。默认语言 因为django已经被设置为en US 如果您请求页面/注册/使用nl nl作为接受语言 头,我得到一个404。 我没想到会有这样的行为。相反,我希望我会是 已重定向到/registratie/,对应于我的 接受语言标题。 当然/注册/使用nl nl Accept语言标题,有效 很好,给我预期的200 我猜这是正常的吗 用户是否有可能从某个网站获得链接并 该链接是为英语构建的,但用户有问题 是否有其他受支持的语言设置,是否接受语言标题? 在这种情况

我已经为一些语言设置了翻译过的URL。默认语言 因为django已经被设置为en US

如果您请求页面/注册/使用nl nl作为接受语言 头,我得到一个404。 我没想到会有这样的行为。相反,我希望我会是 已重定向到/registratie/,对应于我的 接受语言标题。 当然/注册/使用nl nl Accept语言标题,有效 很好,给我预期的200

我猜这是正常的吗

用户是否有可能从某个网站获得链接并 该链接是为英语构建的,但用户有问题 是否有其他受支持的语言设置,是否接受语言标题? 在这种情况下,他将获得404。 应向其提供英文(默认)内容或 或者被重定向到其语言的正确url(如果支持)

如果用户具有不受支持的语言设置,会发生什么情况? 在我的情况下,会使用django默认的
语言\u code

有没有办法解决这个问题,或者用另一种更好的方式处理它

my urls.py文件的摘录显示了我如何设置已翻译的URL:

url(_(r'^step1/$'), AccountTypeSelectionView.as_view(), name="registration_step1"),

我胡乱假设你很懒

如果用户具有不受支持的语言设置,会发生什么情况?在我的例子中,会使用django默认语言代码吗

是,如果未设置特定值,ugettext将使用默认值。您可以在django.utils.translation.trans_real中的do_translate中看到这种行为

ugettext_lazy的情况是,在查找URL之前,将其翻译为用户的语言,然后根据所有这些检查URL的部分。(Django使用每线程语言设置,该设置会更改以反映用户的选择。)

用户是否有可能从某个网站获得链接,并且该链接是为英语语言构建的,但该用户具有不同的支持语言设置“接受语言标题”?在这种情况下,他将获得404。应向其提供英文(默认)内容,或将其重定向到其语言的正确url(如果支持)

嗯,是的,我相信这应该是一个受支持的功能,但快速查看一下源代码,似乎URL解析将不得不改变一点,以适应这一点

您可以做的是使用自定义404页面(如“自定义错误视图”下所述):

在您的URL.py中:

handler404 = 'mysite.views.i18n_retry'
从某种角度来看

from django.utils.translation import override
from django.core.urlresolvers import resolve
def i18n_retry(request):
    for language in settings.LANGUAGES:
        with override(language, deactivate=True):
           try:
              result = resolve(request.path)
              #here you will know what language the url is in
              #if it is a supported format
              #and can do something smart about it
           except Http404:
              #Http404 is thrown whenever resolving fails
              pass
     #here you should probably return a real 404

我使用了Django 1.4中的覆盖上下文管理器。但是如果不翻译URL,还有更长的方法可以做到这一点。

也许最好不要翻译URL。