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 .

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top