I was looking for a solution for internationalizing / localizing routes on the ASP.NET MVC website. I stumbled upon a blog post Translating Routes (ASP.NET MVC and Webforms) from Maarten Balliauw. It is a very nice solution that works great - until the view has Html.RenderAction("...") .
He basically introduces TranslatedRoute , inheriting from System.Web.Routing.Route , than translating using a dictionary with on-the-fly translation.
Any idea why this happens differently when calling Html.RenderAction("...") ? It also seems that if an error occurs only if the action to be displayed is in the same controller.
And here is the exact error:
'Controller for path' / MyTranslatedControllerName 'not found or does not implement IController.
Update:
Here is my route configuration (taken from the Maarten project example, added routes for Contact, which is partial for visualization):
public static void RegisterRoutes(RouteCollection routes) { CultureInfo cultureEN = CultureInfo.GetCultureInfo("en-US"); CultureInfo cultureDE = CultureInfo.GetCultureInfo("de-DE"); CultureInfo cultureFR = CultureInfo.GetCultureInfo("fr-FR"); DictionaryRouteValueTranslationProvider translationProvider = new DictionaryRouteValueTranslationProvider( new List<RouteValueTranslation> { new RouteValueTranslation(cultureEN, "Home", "Home"), new RouteValueTranslation(cultureEN, "About", "About"), new RouteValueTranslation(cultureEN, "Contact", "Contact"), new RouteValueTranslation(cultureDE, "Home", "Home"), new RouteValueTranslation(cultureDE, "About", "About"), new RouteValueTranslation(cultureDE, "Contact", "Kontakt"), new RouteValueTranslation(cultureFR, "Home", "Demarrer"), new RouteValueTranslation(cultureFR, "About", "Infos"), new RouteValueTranslation(cultureFR, "Contact", "Contact") } ); routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapTranslatedRoute( "TranslatedRoute", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }, new { controller = translationProvider, action = translationProvider }, true ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );