public void GetVirtualPath_OverriddenCultureByRouteDictionaryThatDoesNotExist_ReturnsNeutralLocalizationRoute() { using (ShimsContext.Create()) { // Arrange Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); LocalizationCollectionRoute localizationCollectionRoute = new LocalizationCollectionRoute(new Route("Home", new RouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary(), new RouteValueDictionary(), null)); PrivateObject privateObject = new PrivateObject(localizationCollectionRoute); IDictionary <string, LocalizationRoute> routes = (IDictionary <string, LocalizationRoute>)privateObject.GetProperty("LocalizedRoutesContainer"); ShimLocalizationRoute localizationRouteNeutral = new ShimLocalizationRoute(new LocalizationRoute("Welcome", new RouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary(), new RouteValueDictionary(), null, string.Empty)); (new ShimRoute(localizationRouteNeutral)).GetVirtualPathRequestContextRouteValueDictionary = (requestContext, values) => new VirtualPathData(localizationRouteNeutral, "Welcome"); routes[string.Empty] = localizationRouteNeutral; ShimLocalizationRoute localizationRouteEnglish = new ShimLocalizationRoute(new LocalizationRoute("Welcome", new RouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary(), new RouteValueDictionary(), null, "en")); (new ShimRoute(localizationRouteEnglish)).GetVirtualPathRequestContextRouteValueDictionary = (requestContext, values) => new VirtualPathData(localizationRouteEnglish, "Welcome"); routes["en"] = localizationRouteEnglish; ShimLocalizationRoute localizationRouteGerman = new ShimLocalizationRoute(new LocalizationRoute("Willkommen", new RouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary(), new RouteValueDictionary(), null, "de")); routes["de"] = localizationRouteGerman; (new ShimRoute(localizationRouteGerman)).GetVirtualPathRequestContextRouteValueDictionary = (requestContext, values) => new VirtualPathData(localizationRouteGerman, "Willkommen"); // Act VirtualPathData virtualPathData = localizationCollectionRoute.GetVirtualPath(null, new RouteValueDictionary() { { "Culture", "es" } }); // Assert Assert.AreEqual(virtualPathData.Route, localizationRouteNeutral.Instance); } }
public new RouteTranslator <T> AddTranslation(string url, string culture, LocalizationCollectionRoute route) { base.AddTranslation(url, culture, route); return(this); }
public RouteTranslator AddNeutralTranslation(LocalizationCollectionRoute route) { route.AddTranslation(route.Url(), string.Empty); return(this); }
private RouteModel GetRouteModelForRoute(ITabContext context, MvcRouteBase routeBase, Dictionary <int, List <RouteDataMessage> > routeMessages, Dictionary <int, Dictionary <int, List <ProcessConstraintMessage> > > constraintMessages) { RouteModel routeModel = new RouteModel(); RouteDataMessage routeMessage = SafeFirstOrDefault(routeMessages.GetValueOrDefault(routeBase.GetHashCode())); if (routeMessage != null) { routeModel.Duration = routeMessage.Duration; routeModel.IsMatch = routeMessage.IsMatch; } MvcRoute route = routeBase as MvcRoute; if (route != null) { routeModel.Area = (route.DataTokens != null && route.DataTokens.ContainsKey("area")) ? route.DataTokens["area"].ToString() : null; routeModel.Url = route.Url; // Append localizations if possible LocalizationCollectionRoute localizationCollectionRoute = null; FieldInfo fieldInfo = route.GetType().GetField("__target"); if (fieldInfo != null) { localizationCollectionRoute = fieldInfo.GetValue(route) as LocalizationCollectionRoute; } if (localizationCollectionRoute != null) { routeModel.Url += " (LocalizationRoute)"; routeModel.Url += Environment.NewLine; foreach (LocalizationRoute localizationRoute in localizationCollectionRoute.LocalizedRoutes.OrderBy(x => x.Culture)) { routeModel.Url += string.Format(Environment.NewLine + "{0} ({1})", localizationRoute.Url(), !string.IsNullOrEmpty(localizationRoute.Culture) ? localizationRoute.Culture : "neutral"); } if (!localizationCollectionRoute.LocalizedRoutes.Any()) { routeModel.Url += Environment.NewLine + "! No translations exists - this route will not be accessible !"; } } routeModel.RouteData = ProcessRouteData(route.Defaults, routeMessage); routeModel.Constraints = ProcessConstraints(context, route, constraintMessages); routeModel.DataTokens = ProcessDataTokens(route.DataTokens); } else { routeModel.Url = routeBase.ToString(); } IRouteNameMixin routeName = routeBase as IRouteNameMixin; if (routeName != null) { routeModel.Name = routeName.Name; } return(routeModel); }
public RouteTranslator AddTranslation(string url, string culture, LocalizationCollectionRoute route) { RouteTranslator translator = new RouteTranslator(Configuration); return(translator.AddTranslation(url, culture, route)); }
public RouteTranslator AddNeutralTranslation(LocalizationCollectionRoute route) { RouteTranslator translator = new RouteTranslator(Configuration); return(translator.AddNeutralTranslation(route)); }
public void GetVirtualPath_TranslationExistsForThreadCulture_ReturnsTranslatedLocalizationRoute() { using (ShimsContext.Create()) { // Arrange Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); LocalizationCollectionRoute localizationCollectionRoute = new LocalizationCollectionRoute(new HttpRoute("Home", new HttpRouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new HttpRouteValueDictionary(), new HttpRouteValueDictionary(), null)); PrivateObject privateObject = new PrivateObject(localizationCollectionRoute); IDictionary <string, LocalizationRoute> routes = (IDictionary <string, LocalizationRoute>)privateObject.GetProperty("LocalizedRoutesContainer"); ShimLocalizationRoute localizationRouteNeutral = new ShimLocalizationRoute(new LocalizationRoute("Welcome", new HttpRouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new HttpRouteValueDictionary(), new HttpRouteValueDictionary(), null, string.Empty)); (new ShimHttpRoute(localizationRouteNeutral)).GetVirtualPathHttpRequestMessageIDictionaryOfStringObject = (requestContext, values) => new HttpVirtualPathData(localizationRouteNeutral.Instance, "Welcome"); routes[string.Empty] = localizationRouteNeutral; ShimLocalizationRoute localizationRouteEnglish = new ShimLocalizationRoute(new LocalizationRoute("Welcome", new HttpRouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new HttpRouteValueDictionary(), new HttpRouteValueDictionary(), null, "en")); (new ShimHttpRoute(localizationRouteEnglish)).GetVirtualPathHttpRequestMessageIDictionaryOfStringObject = (requestContext, values) => new HttpVirtualPathData(localizationRouteEnglish.Instance, "Welcome"); routes["en"] = localizationRouteEnglish; ShimLocalizationRoute localizationRouteGerman = new ShimLocalizationRoute(new LocalizationRoute("Willkommen", new HttpRouteValueDictionary() { { "controller", "Home" }, { "action", "Index" } }, new HttpRouteValueDictionary(), new HttpRouteValueDictionary(), null, "de")); routes["de"] = localizationRouteGerman; (new ShimHttpRoute(localizationRouteGerman)).GetVirtualPathHttpRequestMessageIDictionaryOfStringObject = (requestContext, values) => new HttpVirtualPathData(localizationRouteGerman.Instance, "Willkommen"); // Act IHttpVirtualPathData virtualPathData = localizationCollectionRoute.GetVirtualPath(null, new HttpRouteValueDictionary()); // Assert Assert.AreEqual(virtualPathData.Route, localizationRouteEnglish.Instance); } }