Django urlpatterns用ugettext lazy翻译 - 如果404如何再次检查url是否匹配另一种语言?

时间:2012-10-26 13:52:09

标签: django internationalization url-pattern

长时间读取堆栈溢出,第一次我需要问这里。

该应用程序是双语的。我在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 /应该显示该视图。

1 个答案:

答案 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))