Многоязычные веб-сайты с ASP.NET MVC
-
08-07-2019 - |
Вопрос
При создании многоязычного веб-сайта (с веб-формами 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 в качестве заголовка принимаемого языка.