长时间读取堆栈溢出,第一次我需要问这里。
该应用程序是双语的。我在urlpatterns中定义了urls,用ugettext_lazy进行翻译。用户选择第一语言和网址工作,如果他将lang改为第二语言,它也可以正常工作。
但是如果用户选择第一语言并在第二个lang中输入url,他就会得到404,因为没有匹配,因为urlpatterns被翻译成第一个语言。
我怎样才能强制Django再次检查翻译成第二语言的urlpatterns?我想显示一个页面,如果它存在,就像在第一个lang中输入url一样。
我使用LocaleMiddleware。
我考虑过设置cookie和重定向,但是如果没有找到,在用户url中会显示url转换为第二个lang,而不是用户输入的内容,这可能会产生误导。
有什么想法吗?
问候,迈克
编辑:我不使用那些i18n模式。 我有点像:
url(_(r'^ contact /'),include('contact.urls')),
并且希望Django能够显示适当的视图而不管选择的语言。如果用户输入/ contact /或翻译成第二语言/ kontakt /应该显示该视图。
答案 0 :(得分:0)
我真的不喜欢翻译网址的想法,但尝试这样的事情:
烯/ django.po:
msgid "^contact/"
msgstr "^en/contact/"
msgid "^wrong_lang/(?P<url_part>.+)"
msgstr "^ru/(?P<url_part>.+)"
urls.py:
url(_(r'^contact/'), include('contact.urls')), # matches "en/contact/" URL
url(_(r'^wrong_lang/(?P<url_part>.+)', redirect_to_current_lang), # matches "ru/..." URLs
views.py:
def redirect_to_current_lang(request, url_part):
return HttpResponseRedirect(_('^%s' % url_part))