sites multilingues com ASP.NET MVC
-
08-07-2019 - |
Pergunta
Ao construir um site multi-lingual (com formulários web ASP.NET), vou usar um HTTP módulo para reescrever as URLs para acabar com algo amigável (para os seres humanos e os motores de busca) 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
Meu (novato) a compreensão do MVC é que o URL deve ter o formato
Controlador / Ação / Identificador
para replicar a funcionalidade acima com MVC vai acabar com URLs semelhantes a:
products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5
Perguntas ..
- Can I inserir um código de país para a URL antes de o segmento 'controller'?
- É possível mapear 'produtos' e 'productos' ao mesmo controlador?
Obrigado por sua ajuda
Editar: Além de resposta Panos' abaixo eu encontrei mais informações sobre o ASP.NET Web site .
Solução
A URL pode levar quase qualquer outra forma você gosta. Para mais informações, confira ASP.NET MVC Framework (Parte 2): URL Routing . Apenas para começar (desde que eu não estou certo se é a solução ideal), você pode adicionar duas novas rotas em sua 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 rotas compreender as seguintes URLs (e mapear os dois para o método ActionResult Category(string id, string subcategory)
de ProductsController
):
uk/Products/Category/1/A
es/Productos/Category/1/A
Se você quiser criar esses URLs em seus pontos de vista que você pode 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" })%>
Outras dicas
Você pode fazer isso, mas tenha em mente que nem todos os países são línguas. Por exemplo, en-gb é a representação usual para Inglês Britânico, ou mais especificamente, a localidade de Grã-Bretanha para conteúdos em Inglês, por exemplo. Se você puder, vale a pena seguir as convenções de derivados de RFC1766 para a linguagem para a localidade.
Os motores de busca realmente tendem a fazer uma boa negociação trabalho com conteúdo de negociação, a propósito, para que você não precisa necessariamente ter URIs separadas para o mesmo conteúdo em diferentes idiomas. Google Japão irá rastrear com ja-JP como o cabeçalho linguagem aceitar, por exemplo.