Как направить несколько URL языка с MVC

Мне нужен многоязычный маршрут URL существующего контроллера. Позвольте мне объяснить больше:

У меня есть контроллер с именем "продукт" и Представление с именем "программное обеспечение"; поэтому, по умолчанию если пользователь вводит "http://example.com/en/Product/Software", получите правильное содержание (который действительно существует в http://example.com/Product/Software),

Однако, если другой пользователь - французский пользователь - вводит "http://example.com/fr/Produits/logiciels", должен добраться выше контроллера и шоу с правильным содержанием (тот же http://example.com/Product/Software, но с французским текстом).

Примечание: Я установил таблицу маршрутизации с "{языком} / {контроллер} / {действие} / {идентификатор}"

Любой другой недопустимый URL должен показать 404 страницы.

Действительно ли это возможно?

20
задан Cœur 31 December 2016 в 04:44
поделиться

2 ответа

Как было предложено ранее, это уходит от Конвенции, где URL-адреса сайта (и маршруты) используют английский язык.

Тем не менее, возможно, но для того, чтобы сделать это, вы, вероятно, придется посмотреть на создание одного маршрута за действие для каждого иностранного языка. Так что для веб-сайта с 20 действиями и тремя языками (английский, французский и немецкий) вам понадобится 41 маршруты (20 французских, 20 немецких и 1 английских). Не самая эффективная система, я признавая, но она работает так, как вы хотите.

//You'll only need one of these, which is the default.
routes.MapRoute(
  "English route",
  "en/{controller}/{action}/{id}"
  new { controller = "Home", action = "Index", language = "en" },
);

routes.MapRoute(
  "FrenchHome",
  "fr/Demarrer/Index/{id}",
  new { controller = "Home", action = "Index", language = "fr" }
);

routes.MapRoute(
  "GermanHome",
  "de/Heim/Index/{id}", //'Heim' is, I believe the correct usage of Home in German.
  new { controller = "Home", action = "Index", language = "de" }
);

//Some more routes...

routes.MapRoute(
  "FrenchSoftware",
  "fr/Produit/Logiciels/{id}",
  new { controller = "Product", action = "Software", language = "fr" }
);

routes.MapRoute(
  "GermanSoftware",
  "de/Produkt/Software/{id}", //In this instance, Software should be the same in German and English.
  new { controller = "Product", action = "Software", language = "de" }
);

//And finally, the 404 action.
routes.MapRoute(
  "Catchall",
  "{language}/{*catchall}",
  new { controller = "Home", action = "PageNotFound", language = "en" },
  new { language = "^(en|fr|de)$" }
);

//This is for the folks who didn't put a language in their url.
routes.MapRoute(
  "Catchall",
  "{*catchall}",
  new { controller = "Home", action = "PageNotFound", language = "en" }
);

В ваших действиях, например, продукт / программное обеспечение ...

public ActionResult Software(string language, int id)
{
  //This would go off to the DAL and get the content in whatever language you want.
  ProductModel model = ProductService.GetSoftware(language, id);

  return View(model);
}

Я бы Любовь Это если кто-то пришел и сказал, что есть лучший способ сделать это, потому что я согласен, что имея URL На иностранном языке не хорош, и учитывая, что сам Интернет движется к тому, что не римские символы в URL-адресах, тем раньше мы смотрим на решения этого, тем лучше.

Не только это, но я знаю, гордыми французскими людьми не любят видеть, что их URL-адреса сайта содержит английский. :)

5
ответ дан 30 November 2019 в 01:20
поделиться

Вы должны иметь URL-то вроде « http://mysite.com/en/product/software « Для английского и » http://mysite.com/fr/product/software «Для французского, который бы особым смысл.

Используйте одинаковый вид для обоих.

Счастливое кодирование.

2
ответ дан 30 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: