Siti web multilingue con ASP.NET MVC
-
08-07-2019 - |
Domanda
Quando creo un sito web multilingue (con moduli web ASP.NET), userò un modulo HTTP per riscrivere gli URL per finire con qualcosa di amichevole (per umani e motori di ricerca) come:
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
La mia (newbie) comprensione di MVC è che l'URL dovrebbe assumere il formato di
Controller / Azione / Identificatore
quindi replicare la funzionalità sopra con MVC finirà con URL simili a:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Domande ..
- Posso inserire un codice paese nell'URL prima del segmento "controller"?
- È possibile mappare "prodotti" e "prodotti" sullo stesso controller?
Grazie per l'aiuto
Modifica Oltre alla risposta di Panos di seguito, ho trovato ulteriori informazioni sul Sito Web ASP.NET .
Soluzione
L'URL può assumere quasi qualsiasi altra forma che ti piace. Per maggiori informazioni, controlla ASP.NET MVC Framework (parte 2): routing URL . Solo per iniziare (poiché non sono sicuro che sia la soluzione ottimale), puoi aggiungere due nuovi percorsi nel tuo 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 = "" }
);
Questi percorsi comprendono i seguenti URL (e li associano entrambi al ActionResult Category (ID stringa, sottocategoria stringa)
del metodo ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
Se vuoi creare tali URL nelle tue viste puoi usare qualcosa come:
<%= 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" })%>
Altri suggerimenti
Puoi farlo, ma tieni presente che non tutti i paesi sono lingue. Ad esempio, en-gb è la consueta rappresentazione dell'inglese britannico, o più specificamente, la locale della Gran Bretagna per il contenuto inglese, ad esempio. Se puoi, vale la pena seguire le convenzioni derivate da RFC1766 per la lingua-LOCALE.
I motori di ricerca in realtà tendono a fare un buon lavoro nella negoziazione dei contenuti, quindi non è necessario avere URI separati per lo stesso contenuto in lingue diverse. Google Japan eseguirà la scansione con ja-JP come intestazione della lingua accetta, ad esempio.