Вопрос

При создании многоязычного веб-сайта (с веб-формами 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-адрес перед сегментом «контроллер»?
  • Можно ли сопоставить «продукты» и «продукты» с одним и тем же контроллером?

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

Редактировать:В дополнение к ответу Паноса ниже я нашел дополнительную информацию о Веб-сайт ASP.NET.

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top