Я последовал за эту замечательную статью о ASP.NET MVC 5 Интернационализация (refered на asp.net сайте): http://afana.me/post/aspnet-mvc-internationalization.aspxASP.NET MVC 5 Интернационализация - культура по умолчанию
После реализации, у меня есть только одна проблема, которую я не может решить. В MVC5, используя культуру в URL-адресах (не используя куки-файлы), культура всегда по умолчанию, никогда не получая предпочитаемые пользователями языки, отправленные браузером.
Более подробно: Проблемы заключается в том, что defauls для культуры в MapRoute, которые начинаются с закодированным культуры по умолчанию для сайта. Затем в BeginExecuteCore RouteData.Values ["culture"] всегда заполняется культурой по умолчанию, никогда не получая культуру из Request.UserLanguages. RouteData.Values ["culture"] заполняется, даже если культура отсутствует в URL-адресе, например, при первом доступе к корню сайта.
Как правильно изменить это поведение?
Возможно создание 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
//...
}