2015-04-23 2 views
0

Я хочу, чтобы пользователи могут получить доступ на веб-сайт сDoing мультиязычных маршруты с MapRoute

English version: web.com/news/bla-bla 
Spanish version: web.com/noticias/bla-asdf 
... 

И я думаю, что изменить RouteConfig.cs это решение, но я не знаю, как это сделать точно. Я принимаю решения, которые не являются MapRoute.

Мой первый тест прошел:

namespace MyWebsite 
{ 
    public class RouteConfig 
    { 
      routes.MapRoute(
       name: "Default", 
       url: {id}, 
       defaults: 
        // In a web running in a server I should use local resources 
        if ({id} == ("about" || "sobre" || "sur")) 
        { 
         defaults: new { controller = "Home", action = "about"} 
        } 
     } 
    } 
} 

Мой второй не прошел тест: ОШИБКА: (Дополнительная информация: Маршрут под названием «О» уже в коллекции маршрута названия маршрута должны быть уникальными..) - > Я не могу «перемотать» маршрут.

 string[] about = { "about", "sobre", "sur" }; 
     for (int i = 0; i < about.Length; i++) 
     { 
      //if ({id}.Equals(about[i]) 
      routes.MapRoute(
       name: "About", 
       url: about[i], 
       defaults: new { controller = "Home", action = "About"} 
     ); 

ответ

0

Вы должны наметить каждый маршрут индивидуально, передав динамическое языковое значение контроллеру. Например:

 routes.MapRoute(
      name: "News English", 
      url: "News", 
      defaults: new { controller = "Home", action = "News", language = "en-US"} 
     ); 

     routes.MapRoute(
      name: "News Italian", 
      url: "Notizie", 
      defaults: new { controller = "Home", action = "News", language = "it-IT" } 
     ); 

и в контроллере вы можете получить язык и делать то, что вы хотите с ним (например, установить текущую культуру и текущей культуры пользовательского интерфейса):

public ActionResult News(string language) 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); 
     System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language); 

     //Do what you want 

     return View(); 
    }