10

多言語 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 Websiteで詳細情報を見つけました。

4

2 に答える 2

12

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 を認識します (そして、それらの両方を のActionResult Category(string id, string subcategory)メソッドにマップしますProductsController)。

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" })%>
于 2008-11-14T22:46:37.147 に答える
3

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

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

于 2008-11-15T06:38:50.627 に答える