When building a multi-lingual website (with ASP.NET web forms), I'll use an HTTP module to rewrite the URLs to end up with something friendly (for humans & search engines) like:
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
My (newbie) understanding of MVC is that the URL should take the format of
Controller / Action / Identifier
so replicating the functionality above with MVC will end up with URLs similar to:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Questions..
Thanks for your help
Edit: In addition to Panos' answer below I found more information on the ASP.NET Website.
The URL can take almost any other form you like. For more info, check ASP.NET MVC Framework (Part 2): URL Routing. Just for starting (since I am not sure if it is the optimum solution), you can add two new routes in your global.asax:
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 = "" }
);
These routes understand the following URLs (and map both of them to the ActionResult Category(string id, string subcategory)
method of ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
If you want to create such URLs in your views you can use something like:
<%= 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" })%>