Je développe multilingue pages asp.net site mvc. La langue stocke dans l'URL. Celui par défaut sera l'anglais. Je BaseController classeMultilanguages asp.net site mvc et routage
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
string culture = filterContext.RouteData.Values[MvcApplication.CultureParamerName] as string;
if (string.IsNullOrWhiteSpace(culture))
culture = Facade.Common.GetLocale(BECulture.Cultures.English);//==en-us
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
base.OnActionExecuting(filterContext);
}
et quelques routes
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Photos_Route",
"{culture}/photos/{action}/{id}",
new { controller = "photos", action = "show", culture = "en-us" }
);
routes.MapRoute(
"PhotosDownload_Route",
"{culture}/photos/{action}/{id}/resolution/{measure1}x{measure2}",
new { controller = "photos", action = "download", culture = "en-us" }
);
routes.MapRoute(
"Pages_Router",
"{culture}/page/{id}",
new { controller = "home", action = "page", id = UrlParameter.Optional, culture = "en-us" }
);
routes.MapRoute(
"Tags_Route", // Route name
"{culture}/tag/{tag}", // URL with parameters
new { controller = "photos", action = "ShowPhotosByTag", culture = "en-us" } // Parameter defaults
);
routes.MapRoute(
"Home_Route",
"{culture}/{action}",
new { controller = "home", culture = "en-us" }
);
routes.MapRoute(
"Default_Route",
"{culture}/{controller}/{action}/{id}",
new { controller = "home", action = "index", id = 1, culture = "en-us" }
);
}
Je veux faire ce qui suit: si la langue actuelle est l'anglais l'URL ne doit pas contenir « en-us » valeur, parce que les Anglais est la langue par défaut. Et vice versa: s'il n'y a pas de paramètre "culture"
dans l'URL (c'est-à-dire dans RouteData.Values["culture"]
) alors la langue par défaut est l'anglais.
Comment puis-je le faire?
MISE À JOUR: la clarification sur ce que je veux. La page principale (_Layout.cshtml) contient le lien vers la page "About site"
@Html.ActionLink(Resources.Strings.About_LinkText, "about", "home")
Si le site en anglais il pointe /en-us/about
. Mais je veux (si le site en anglais) il faut pointer vers /about
(sans en-us).
Vous faites fondamentalement la culture nécessaire dans chaque demande, il devra donc être inclus dans chaque demande. Par défaut, le premier paramètre sera toujours la culture. Donc, si c'est «/ home», alors «home» devient la culture. Ce n'est pas la chose la plus facile à faire. Les itinéraires sont-ils définis ou pouvez-vous les changer? – Buildstarted
Je peux les changer. – Alexandre
Vous voudrez probablement déplacer la culture vers le dernier élément et en faire le '{* culture}' mais ce n'est toujours pas facile. Vous devrez peut-être créer une contrainte de route et dupliquer toutes vos routes sans le paramètre de culture. – Buildstarted