Sites Web multilingues avec ASP.NET MVC
-
08-07-2019 - |
Question
Lors de la création d'un site Web multilingue (avec des formulaires Web ASP.NET), j'utilise un module HTTP pour réécrire les URL afin d'obtenir quelque chose de plus convivial (pour les moteurs de recherche et humains), tel que:
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
D'après ce que je comprends (novice) de MVC, l'URL doit prendre le format de
Contrôleur / Action / Identifiant
de sorte que la réplication de la fonctionnalité ci-dessus avec MVC aboutira à des URL similaires à:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Questions ..
- Puis-je insérer un code de pays dans l'URL avant le segment "contrôleur"?
- Est-il possible de mapper les "produits" et les "produits" sur le même contrôleur?
Merci de votre aide
Modifier: En plus de la réponse de Panos ci-dessous, j'ai trouvé plus d'informations sur le site Web ASP.NET. .
La solution
L’URL peut prendre presque n’importe quelle autre forme. Pour plus d'informations, consultez ASP.NET MVC Framework (Partie 2): Routage des URL . Juste pour commencer (car je ne suis pas sûr que ce soit la solution optimale), vous pouvez ajouter deux nouvelles routes dans votre 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 = "" }
);
Ces itinéraires comprennent les URL suivantes (et les associent à la méthode ActionResult Category (id de chaîne, sous-catégorie de chaîne)
de ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
Si vous souhaitez créer de telles URL dans vos vues, vous pouvez utiliser quelque chose comme:
<%= 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" })%>
Autres conseils
Vous pouvez le faire, mais gardez à l'esprit que tous les pays ne sont pas des langues. Par exemple, en-gb est la représentation habituelle de l'anglais britannique, ou plus précisément des paramètres régionaux de la Grande-Bretagne pour le contenu anglais, par exemple. Si vous le pouvez, respectez les conventions issues de RFC1766 pour language-LOCALE.
Soit dit en passant, les moteurs de recherche ont tendance à faire un assez bon travail en matière de négociation de contenu. Il n'est donc pas nécessaire de disposer d'URI distincts pour le même contenu dans différentes langues. Par exemple, Google Japon explorera avec ja-JP l'en-tête de langue d'acceptation.