2017-12-26 9 views
0

サポートされている言語ごとに同じビューを使用したいと思います。 例として、既定の言語と英語があります。私のメインのURLでdjangoで複数の言語を扱う複数のURLを1つのビューで表示

:私の投稿アプリの

url(r'^posts/', include('posts.urls')),  #for default language 
url(r'^en/posts/', include('posts.urls')), #for english 

URLのファイルは、このようなものです:そう

url(r'^newpost/$', views.PostFormView.as_view(), name='add'), 
url(r'^favorite/$', views.favorite, name='favorite'), 

、例えば、両方www.mysite.com/posts/addとwww.mysite.com/en/posts/add PostFormViewと同じビューに送信し、urlに "/ en /"が含まれているかどうかに応じて、正しい言語でコンテンツを送信します。

ただし、問題はリダイレクトまたはリバースセンドを常にデフォルトの言語にすることです。例えば、「posts:add」は、url(r'^en/posts/', include('posts.urls'))

の前にurl(r'^posts/', include('posts.urls'))があるので、「www.mysite.com/posts/add」に常に「www.mysite.com/posts/add」を送信します.2つの異なるURLに同じビューを使用する方法はありますか。または、複数言語のウェブサイトをどうすれば処理できますか?サポートされているすべての言語のすべてのアプリを複製する必要がありますか?

+0

Djangoの[国際化とローカリゼーション](https://docs.djangoproject.com/en/2.0/topics/i18n/)の機能を見ても、言語ごとに異なるURLを使用するのではなく、 – ubadub

+0

@ubadub + 1、Djangoはもともとこれをサポートしていました。 – Ykh

+0

i18n URLセクションの文書は[こちら]です(https://docs.djangoproject.com/en/2.0/topics/i18n/translation/#module-django.conf.urls.i18n) – Ykh

答えて

1

これは長い主題であり、それはすべてをカバーするのは容易ではないですが、私はできる限りをカバーしようとするでしょう:

1 - 利用ジャンゴ国際化とローカライゼーション:

DjangoはAありマルチ言語ウェブサイトのための組み込み関数:

Internationalization and localization

2 - さまざまなGETリクエストで単一URLを使用する:

あなたのURLにGETリクエストを追加することができます:site.com/posts?lang=en。あなたの意見でこれを試してください:

language = request.GET.get('lang') 

このテンプレートには、この言語の正しいテンプレートを渡してください。

例:

LANG_LIST = ['en', 'fa', 'fr'] 
if language.lower() in LANG_LIST: 
    template = '{}/posts/post.html'.format(language.lower()) 
else: 
    template = 'en/posts/post.html' 

たり、別の言語のテキストで単一のテンプレートを使用して、ちょうどテンプレートに言語を渡し、そこに決定することができます。

注: GET要求がなくても言語を取得できるように、ユーザーの言語をセッションに追加する必要があります。

は、ここでのセッションのためのドキュメントです:

How to use sessions | Django documentation | Django

はまた、あなたのプロフィールユーザーに言語を追加して、そこから言語を取得することができます。プロファイル言語とユーザーセッションの両方を使用することをお勧めします。

3 - 異なるURL(あなたの道):

私は本当に、多言語ウェブサイトを扱うこの方法のファンではないんだけど、あなたは本当にここに、それをこのように実行する必要がある場合は、あなたが行きます:

  • あなたは右のページのURLにリダイレクトすることができますので、あなたのURLの異なる名前がposts_enposts_frとなどをLILE必要です。
  • あなたのビューでページのURLを取得し、使用する言語を確認する必要があります。次のようなことができます:request.path.split('/')
  • 次にあなたが言語をチェックして、私はあなたがこれで行くべきとは思わないので、複数の言語を扱うこの方法で非常に多くの問題が発生することがありますちょうどオプション#2

ようにレンダリングするテンプレートを決定する必要があります他の2つのオプションに1つ

+0

私は熟考します2番目の方法。しかし、別の質問があります。この場合、ビューをリダイレクトまたは逆にしてURLに '?lang = en'を追加するにはどうすればよいですか?例:リダイレクト(投稿:追加)www.mysite.com/posts/newpost/?lang=ja – A2maridz

+0

@ A2maridzまあ、それはセッションの助けとなりました。セッションがあるかどうかをチェックして、そこに言語があるかどうかを確認するだけで、探している言語がある場合はデフォルトの言語を使用します。基本的にユーザーがデフォルト言語を変更するたびに、選択した言語をセッションに追加するだけで、将来のリクエストで 'lang' GETリクエストが不要になります。 – Navid2zp

+0

さて、それを得ました!私はセッションについて読んでいます。ありがとう – A2maridz

関連する問題