Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #4
0
        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);
            }
        }