Sitios web multilingües con ASP.NET MVC
asp.net-mvc url-rewriting (2)
Cuando construya un sitio web multilingüe (con formularios web ASP.NET), usaré un módulo HTTP para reescribir las URL y terminar con algo amigable (para humanos y motores de búsqueda) como:
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
Mi (novato) entendimiento de MVC es que la URL debe tomar el formato de
Controlador / Acción / Identificador
entonces la replicación de la funcionalidad anterior con MVC terminará con URLs similares a:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Preguntas ...
- ¿Puedo insertar un código de país en la URL antes del segmento ''controlador''?
- ¿Es posible asignar "productos" y "productos" al mismo controlador?
Gracias por tu ayuda
Editar: Además de la respuesta de Panos a continuación, encontré más información en el sitio web de ASP.NET .
La URL puede tomar casi cualquier otra forma que desee. Para obtener más información, consulte ASP.NET MVC Framework (Parte 2): enrutamiento de URL . Solo para comenzar (ya que no estoy seguro de si es la solución óptima), puede agregar dos nuevas rutas en su archivo 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 = "" }
);
Estas rutas entienden las siguientes URL (y las ActionResult Category(string id, string subcategory)
de ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
Si desea crear tales URL en sus vistas, puede usar algo como:
<%= 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" })%>
Puede hacer esto, pero tenga en cuenta que no todos los países son idiomas. Por ejemplo, en-gb es la representación habitual para el inglés británico, o más específicamente, la configuración regional de Gran Bretaña para contenido en inglés, por ejemplo. Si puede, vale la pena seguir las convenciones derivadas de RFC1766 para el lenguaje LOCAL.
En realidad, los motores de búsqueda tienden a hacer un trabajo bastante bueno al tratar con la negociación de contenido, por lo que no es necesario que tengas URI separados para el mismo contenido en diferentes idiomas. Google Japón rastreará con ja-JP como el encabezado del idioma de aceptación, por ejemplo.