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