Pregunta

Al construir un sitio web multilingüe (con formularios web ASP.NET), usaré un módulo HTTP para reescribir las URL para 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 comprensión (novata) de MVC es que la URL debe tomar el formato de

  

Controlador / Acción / Identificador

por lo que replicar la funcionalidad anterior con MVC terminará con URL 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 ASP.NET .

¿Fue útil?

Solución

La URL puede tomar casi cualquier otra forma que desee. Para obtener más información, consulte Marco ASP.NET MVC (Parte 2): Enrutamiento de URL . Solo para comenzar (ya que no estoy seguro de si es la solución óptima), puede agregar dos rutas nuevas en su 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 comprenden las siguientes URL (y las asignan a la categoría ActionResult Category (id de cadena, subcategoría de cadena) del método 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" })%>

Otros consejos

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 language-LOCALE.

Los motores de búsqueda en realidad tienden a hacer un trabajo bastante bueno al tratar con la negociación de contenido, por cierto, por lo que no necesariamente tiene que tener URI separados para el mismo contenido en diferentes idiomas. Google Japan se arrastrará con ja-JP como el encabezado del idioma de aceptación, por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top