Проследих тази страхотна статия за интернационализацията на ASP.NET MVC 5 (посочена от сайта на asp.net): http://afana.me/post/aspnet-mvc-internationalization.aspx
След внедряването имам само един проблем, който не мога да разреша. В MVC5, използвайки културата в URL адреси (НЕ използвайки бисквитки), културата винаги е по подразбиране, никога не получава предпочитаните от потребителите езици, изпратени от браузъра.
По-подробно: Проблемът е по подразбиране за култура в MapRoute, която започва с твърдо кодираната по подразбиране култура за сайт. След това в BeginExecuteCore RouteData.Values["culture"] винаги се запълва с културата по подразбиране, като никога не се получава култура от Request.UserLanguages. RouteData.Values["culture"] се попълва дори ако културата не присъства в URL адреса, например при първи root достъп на сайта.
Как правилно да промените това поведение?
Може би създаване на 2 маршрута, един без култура?
Свързан код:
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new {culture = CultureHelper.GetDefaultCulture(), controller = "Home", action = "Index", id = UrlParameter.Optional }
);
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
string cultureName = RouteData.Values["culture"] as string;
// Attempt to read the culture cookie from Request
if (cultureName == null)
cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ? Request.UserLanguages[0] : null; // obtain it from HTTP header AcceptLanguages
//...
}