ASP.NET MVCを使用した多言語Webサイト
-
08-07-2019 - |
質問
多言語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を使用してクロールします。