3

Google アプリ エンジンでサイトを構築しています。そのコア コードとデータベースは、さまざまな言語と地域を処理するように設計されています。

私が本当に探しているのは、特に gae/django/python セットアップのために、URL をどのように構造化するかについての提案です。そのため、ウェブサイトは URL に応じてページをロードする言語を認識します。

ここに私の提案があります。あなたが最善だと思うものを教えてください。

サブドメイン: http://fr.mysite.com/ しかし、「en」、「fr」、「de」などの異なるサブドメインを持ち、アカウント内の同じ Google アプリを指すことは可能ですか?

ドメイン拡張: http://www.mysite.fr / 言語ごとに異なるドメイン名を購入して、同じアプリを指すようにすることはできますか?

最初のフォルダ: http://www.mysite.com/fr/about-usこの方法は機能しますが、コードを書くのが煩わしいので、必要以上に長い URL は避けたいと思います。考え?

私が考えていない他のオプションはありますか?アドバイスをいただければ幸いです。

4

2 に答える 2

3

これは、URL のプレフィックスでも実行できることを指摘したかっただけです。次のように:

www.site.com/en/rest_of_url

www.site.com/fr/rest_of_url

アプリは次のようにセットアップされます。

 class LanguageHandler(webapp2.RequestHandler):
     def dispatch(self):
         request = self.request
         args = request.route_args
         if len(args) and args[0] in ['en','fr']:
             self.language = args[0]
             request.route_args = args[1:]
         try:
             # Dispatch the request.
             webapp2.RequestHandler.dispatch(self)
         finally:
             # The web page response Header will now include the 2 letter language code...
             self.response.headers['Content-Language'] = str(self.language)

 class HomePage(LanguageHandler):
     def get(self):
         # self.language is now 'en' or 'fr'
         # ...code goes here...

 app = webapp2.WSGIApplication([
     (r'/(en|fr)', HomePage),
 ], debug = True)
于 2012-12-16T06:37:55.233 に答える
1

これら 3 つすべてが、開発の観点からの可能性です。「ドメイン拡張」モデルは、リソースとサポートしたい言語によっては高価であり、おそらく不可能であることが判明する可能性があります.たとえば.frは、フランスの居住者またはエンティティのみに制限されています.

「最初のフォルダー」モデルは、プログラミングがそれほど難しくないかもしれません。ハンドラーをセットアップするときは、次のようにすることができます。

application = webapp.WSGIApplication(
[
  ('/(en|fr|de)/', IndexController),
]

次に、言語識別子を最初のパラメーターとしてハンドラーに明示的に渡します。

あなたが指摘したように、サブドメインはURLの観点から最もクリーンになります. PythonRuntime Environmentドキュメントに記載されているように、複数のサブドメインを同じアプリケーションにマップできます。実際、ホストされているアプリケーションはすべて [何でも].[アプリケーション名].appspot.com に応答します。アクセスに使用されるホストは、リクエスト オブジェクトから抽出できます。

全体として、他の何よりも個人的な好みのようです。

于 2010-11-03T09:45:51.690 に答える