4

读栈溢出很久了,第一次来这里请教一下。

该应用程序是双语的。我在 urlpatterns 中定义了要使用 ugettext_lazy 翻译的 url。用户选择第一种语言并且 url 可以正常工作,如果他将 lang 更改为第二种语言,它也可以正常工作。

但是如果用户选择第一种语言并在第二种语言中输入 url,他会得到 404,因为没有匹配,因为 urlpatterns 被翻译为第一种语言。

我怎么能强迫 Django 再次检查翻译成第二语言的 urlpatterns?我想显示一个页面(如果存在),就好像 url 将在第一个语言中输入一样。

我使用 LocaleMiddleware。

我想过设置 cookie 和重定向,但如果没有找到,在用户 url 中将显示翻译为第二语言的 url,而不是用户输入的内容,这可能会产生误导。

有任何想法吗?

问候,迈克

编辑:我不使用那些 i18n 模式。我有类似的东西:

url(_(r'^contact/'), 包括('contact.urls')),

并希望 Django 无论选择何种语言都显示适当的视图。如果用户输入 /contact/ 或翻译成第二语言 /kontakt/,则应显示视图。

4

1 回答 1

0

我真的不喜欢翻译 URL 的想法,但尝试这样的事情:

zh/django.po:

msgid "^contact/"
msgstr "^en/contact/"

msgid "^wrong_lang/(?P<url_part>.+)"
msgstr "^ru/(?P<url_part>.+)"

网址.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

视图.py:

def redirect_to_current_lang(request, url_part):
   return HttpResponseRedirect(_('^%s' % url_part))
于 2012-12-02T18:57:05.620 回答