Cóż, jest to częściowo możliwe (tylko część językowa). Nazwa kontrolera w innym języku jest zdecydowanie interesująca, ale myślę, że trudno byłoby to osiągnąć. Zastanów się, jak to będzie wyglądać w przypadku języków Bidi takich jak arabski i hebrajski. Prawdopodobnie dobrym pomysłem byłoby użycie kontrolera w różnych językach, ale stworzysz spustoszenie dla siebie i uważam, że musiałbyś zmienić bazową strukturę MVC, aby to umożliwić.
Część zmiany języka jest łatwa i można ją wykonać jak poniżej.
Na co możesz spojrzeć, to globalizacja. Zasadniczo część językowa odpowiada aktualnej kulturze UI wątków. Co trzeba jest następujący:
Zdefiniuj trasę, coś takiego:
var lang = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
routes.MapRoute(
name: "Default",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = lang, controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
Rejestru Application_AcquireRequestState
i zdefiniować go coś takiego:
protected void Application_AcquireRequestState()
{
var routes = RouteTable.Routes;
var httpContext = Request.RequestContext.HttpContext;
if (httpContext == null) return;
var routeData = routes.GetRouteData(httpContext);
var language = routeData.Values["language"] as string;
var cultureInfo = new CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
Chociaż CurrentUICulture
jest co potrzebujesz zmienić informacje o ładowaniu języków z pliku zasobów, powinieneś również zmienić CurrentCulture
na ten sam CultureInfo
;
Na koniec upewnij się, że masz odpowiednie pliki zasobów i zapasowy plik zasobów.
użyłem Name
własność CultureInfo
więc niemiecki byłaby de-DE, angielski en-US itp To powinno załatwić sprawę.
Jeśli potrzebujesz więcej informacji, mógłbym przesłać przykładowy projekt MVC do zbadania.
UPDATE: Jedna surowy sposób robić to, co chcesz, aby odwrócić kolejność odcinków tras do czegoś takiego:
routes.MapRoute(
name: "NewDefault",
url: "{language}/{id}/{action}/{controller}",
defaults: new { language = lang, controller = "Home", action = "Index", id = "Category"}
);
W ten sposób można wykonać następującą prośbę http://www.your_url.com/de/Kategorien. W tym przypadku kategorien jest mapowane na id
zamiast kontrolera. Kontroler pozostaje w języku angielskim lub niemieckim (w zależności od sposobu jego nazwania), ale użytkownik widzi inny język. W tle Twój widok może być coś takiego:
public ActionResult Index(string id, string categoryName)
{
// Fetch data based on category name (categoryName)
return View();
}
Ty mógł przejść Informacje dodatkowe parametry, ale trzeba będzie dostosować trasę do wyglądać tak: {język}/{kategoria}/{podkategorii}/{action}/{controller}
Po prostu wiedz, że na dłuższą metę może to powodować ból szyi, a jeśli to spróbujesz, upewnij się, że dobrze to dokumentujesz.
Zobacz [Kultura ASP.NET MVC 5 w trasie i url] (http://stackoverflow.com/a/32839796/181087) dla kompletnego rozwiązania. – NightOwl888