4

スタック オーバーフローを長い間読んでいます。初めて、ここで sth に質問する必要があります。

アプリはバイリンガルです。urlpatterns で URL を定義し、ugettext_lazy で翻訳します。ユーザーが最初の言語を選択すると、URL が機能します。lang を 2 番目の言語に変更すると、うまく機能します。

しかし、ユーザーが第 1 言語を選択して第 2 言語で URL を入力すると、urlpatterns が第 1 言語に変換されるため、一致するものがないため、404 が返されます。

Django に 2 番目の言語に翻訳された urlpatterns を再度チェックさせるにはどうすればよいですか? 最初の言語にurlが入力されているかのように、ページが存在する場合は表示したい。

LocaleMiddleware を使用しています。

Cookie とリダイレクトを設定することを考えましたが、見つからない場合、ユーザーの URL には、ユーザーが入力したものではなく、2 番目の言語に変換された URL が表示され、誤解を招く可能性があります。

何か案は?

よろしく、マイク

編集:これらの i18n パターンは使用しません。私は次のようなものを持っています:

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

選択した言語に関係なく、Django に適切なビューを表示させたいと考えています。ユーザーが /contact/ と入力するか、第 2 言語の /kontakt/ に翻訳すると、ビューが表示されます。

4

1 に答える 1

0

URL を翻訳するという考えはあまり好きではありませんが、次のようにしてみてください。

ja/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

ビュー.py:

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