質問

多言語Webサイト(ASP.NET Webフォームを使用)を構築する場合、HTTPモジュールを使用してURLを書き換え、次のような使いやすい(人間と検索エンジン向け)ものにします。

uk/products/product_category_one/sub_category_one/index.aspx
uk/products/product_category_one/sub_category_one/widget_mk5.aspx
es/productos/categoría_de_producto_una/widget_mk5.aspx

MVCの私の(初心者)の理解は、URLは次の形式を取る必要があるということです

  

コントローラー/アクション/識別子

したがって、MVCを使用して上記の機能を複製すると、次のようなURLになります。

products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5

質問..

  • 「コントローラー」セグメントの前に国コードをURLに挿入できますか?
  • 「products」と「productos」を同じコントローラーにマップすることは可能ですか?

ご協力ありがとうございます

編集: 以下のPanosの回答に加えて、 ASP.NET Webサイトで詳細を見つけました。

役に立ちましたか?

解決

URLは、他のほとんどすべての形式を取ることができます。詳細については、 ASP.NET MVCフレームワーク(パート2):URLルーティング。開始するために(最適なソリューションかどうかはわかりません)、global.asaxに2つの新しいルートを追加できます。

        routes.MapRoute(
            "ukRoute",
            "{lang}/Products/{action}/{id}/{subcategory}",
            new { lang = "uk", controller = "Products", action = "Index", id = "", subcategory = "" }
        );
        routes.MapRoute(
            "esRoute",
            "{lang}/Productos/{action}/{id}/{subcategory}",
            new { lang = "es", controller = "Products", action = "Index", id = "", subcategory = "" }
        );

これらのルートは以下のURLを理解します(そして両方を ProductsController ActionResult Category(string id、string subcategory)メソッドにマップします):

uk/Products/Category/1/A
es/Productos/Category/1/A

ビューにそのようなURLを作成する場合は、次のようなものを使用できます。

<%= Html.RouteLink("English 1.A", "ukRoute", new { lang = "uk", action = "Category", id = "1", subcategory = "A" })%>
<%= Html.RouteLink("Spanish 1.A", "esRoute", new { lang = "es", action = "Category", id = "1", subcategory = "A" })%>

他のヒント

これを行うことはできますが、すべての国が言語ではないことに注意してください。たとえば、en-gbは、英国英語、より具体的には、たとえば英国コンテンツの英国ロケールの通常の表現です。可能な場合は、RFC1766から派生した言語ローカルの規則に従う価値があります。

検索エンジンは、実際にはコンテンツネゴシエーションを扱うかなり良い仕事をする傾向があるので、異なる言語の同じコンテンツに対して個別のURIを必ずしも持つ必要はありません。 Google Japanは、たとえば、ac-languageヘッダーとしてja-JPを使用してクロールします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top