I managed this with the following routes:
routes.MapRoute(
"Default",
"{language}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", language = "tr", id = UrlParameter.Optional },
new { language = @"(tr)|(en)" }
);
I process the culture by overriding the GetControllerInstance () method of DefaultControllerFactory. Below is an example:
public class NinjectControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {
string UILanguage;
if (requestContext.RouteData.Values["language"] == null) {
UILanguage = "tr";
}
else {
UILanguage = requestContext.RouteData.Values["language"].ToString();
}
CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
return base.GetControllerInstance(requestContext, controllerType);
}
}
and register it on global.asax;
protected void Application_Start() {
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
source
share