Многоязычные сайты с ASP.NET MVC - PullRequest
9 голосов
/ 15 ноября 2008

При создании многоязычного веб-сайта (с веб-формами ASP.NET) я буду использовать HTTP-модуль для перезаписи URL-адресов, чтобы в итоге получить что-то дружественное (для людей и поисковых систем), например:

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

Мое (новичковое) понимание MVC заключается в том, что URL должен принимать формат

Контроллер / Действие / Идентификатор

, поэтому репликация вышеуказанной функциональности с MVC приведет к URL-адресам, похожим на:

products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5

Вопросы ..

  • Могу ли я вставить код страны в URL перед сегментом 'controller'?
  • Можно ли отобразить «products» и «productos» на один контроллер?

Спасибо за вашу помощь

Edit: В дополнение к ответу Panos ниже я нашел больше информации на ASP.NET Website .

Ответы [ 2 ]

12 голосов
/ 15 ноября 2008

URL может принимать практически любую другую форму, которая вам нравится. Для получения дополнительной информации, проверьте ASP.NET MVC Framework (часть 2): URL Routing . Просто для начала (поскольку я не уверен, что это оптимальное решение), вы можете добавить два новых маршрута в ваш 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 = "" }
        );

Эти маршруты понимают следующие URL-адреса (и сопоставляют их оба с методом ActionResult Category(string id, string subcategory) ProductsController):

uk/Products/Category/1/A
es/Productos/Category/1/A

Если вы хотите создать такие URL в своих представлениях, вы можете использовать что-то вроде:

<%= 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" })%>
3 голосов
/ 15 ноября 2008

Вы можете сделать это, но имейте в виду, что не все страны являются языками. Например, en-gb является обычным представлением для британского английского, или, более конкретно, языковым стандартом Великобритании для английского контента, например. Если вы можете, стоит придерживаться производных от RFC1766 соглашений для language-LOCALE.

Кстати, поисковые системы, как правило, неплохо справляются с согласованием контента, поэтому необязательно иметь отдельные URI для одного и того же контента на разных языках. Например, Google Japan будет сканировать с помощью ja-JP в качестве заголовка принимаемого языка.

...