我开发了多语言asp.net mvc站点。该语言存储在URL中。默认的是英文。 我有BaseController类多语言asp.net mvc站点和路由
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);
}
和部分航线
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" }
);
}
我想要做以下操作:如果当前的语言是英语,则网址不得包含“EN-US”值,因为英语是默认语言。反之亦然:如果URL中没有参数"culture"
(即RouteData.Values["culture"]
),则默认语言为英语。
我该怎么办?
更新:澄清我想要什么。母版页(_Layout.cshtml)包含链接的网页"About site"
@Html.ActionLink(Resources.Strings.About_LinkText, "about", "home")
如果该网站的英文版它指向/en-us/about
。但我想(如果英文网站)应该指向(没有en-us)。
你基本上在每个请求中都需要文化,所以它必须包含在每个请求中。默认情况下,第一个参数将始终是文化。所以如果是“/ home”,那么“家”成为文化。这不是最容易做的事情。路线是否已设定或可否更改? – Buildstarted
我可以改变它们。 – Alexandre
你可能会想把文化移到最后一个项目,并使其成为'{* culture}',但它仍然不容易。你可能需要创建一个路由约束,并且复制你的所有路由,但不带文化参数 – Buildstarted