Mehrsprachige Websites mit ASP.NET MVC
-
08-07-2019 - |
Frage
Beim Erstellen einer mehrsprachigen Website (mit ASP.NET-Webformularen) verwende ich ein HTTP-Modul, um die URLs neu zu schreiben, um am Ende etwas Freundliches (für Menschen und Suchmaschinen) zu erhalten, wie zum Beispiel:
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
Mein (Neulings-)Verständnis von MVC ist, dass die URL das Format haben sollte
Controller / Aktion / Bezeichner
Das Replizieren der oben genannten Funktionalität mit MVC führt also zu URLs ähnlich der folgenden:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Fragen..
- Kann ich vor dem Segment „Controller“ einen Ländercode in die URL einfügen?
- Ist es möglich, „Produkte“ und „Produkte“ demselben Controller zuzuordnen?
Vielen Dank für Ihre Hilfe
Bearbeiten:Zusätzlich zu Panos‘ Antwort unten habe ich weitere Informationen dazu gefunden ASP.NET-Website.
Lösung
Die URL kann fast jede beliebige andere Form annehmen.Weitere Informationen finden Sie unter ASP.NET MVC Framework (Teil 2):URL-Routing.Nur für den Anfang (da ich nicht sicher bin, ob es die optimale Lösung ist) können Sie Ihrer global.asax zwei neue Routen hinzufügen:
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 = "" }
);
Diese Routen verstehen die folgenden URLs (und ordnen beide der zu ActionResult Category(string id, string subcategory)
Methode von ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
Wenn Sie solche URLs in Ihren Ansichten erstellen möchten, können Sie Folgendes verwenden:
<%= 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" })%>
Andere Tipps
Sie können dies tun, aber denken Sie daran, dass nicht alle Länder sind Sprachen. Zum Beispiel de-de ist die übliche Darstellung für britisches Englisch, oder genauer gesagt, das Großbritannien locale für englische Inhalte, zum Beispiel. Wenn Sie können, es lohnt sich nach den RFC1766 abgeleiteten Konventionen für Sprache-locale.
Suchmaschinen ist in der Regel tatsächlich eine ziemlich gute Arbeit Umgang mit Content-Negotiation zu tun, durch die Art und Weise, so müssen unbedingt haben Sie keine separaten URIs für den gleichen Inhalt in verschiedenen Sprachen. Google Japan wird kriechen mit ja-JP als die Sprache Header akzeptieren, zum Beispiel.