У меня есть приложение MVC с локализацией. Это работало замечательно, пока я не добавил Области в свое приложение. Я использовал этот переключатель языка для переключения между доступными языками.
Вот HTML-код:
<div class="dropdown-menu dropdown-menu-fit dropdown-menu-right dropdown-menu-anim dropdown-menu-top-unround">
<ul id="mLangSel" class="kt-nav kt-margin-t-10 kt-margin-b-10">
<li id="mLangEn" class="kt-nav__item ">
<a href="@Url.Action("SwitchUICulture","Home",new {lang="en" })" class="kt-nav__link">
<span class="kt-nav__link-icon"><img class="rounded-circle" data-offset="10px,0px" src="~/assets/media/flags/012-uk.svg" alt="" /></span>
<span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ENGLISH</span>
</a>
</li>
<li id="mLangIs" class="kt-nav__item">
<a href="@Url.Action("SwitchUICulture","Home",new {lang="is-IS" })" class="kt-nav__link">
<span class="kt-nav__link-icon"><img class="rounded-circle" style="width:30px;height:auto;" src="~/assets/media/flags/is_iceland.svg" alt="" /></span>
<span class="kt-nav__link-text" style="margin-left:10px">@Menus.MENU_LANG_ICELANDIC</span>
</a>
</li>
</ul>
</div>
, а вот метод контроллера:
public ActionResult SwitchUICulture(string lang)
{
//TODO: Add update to UILang claim for user on every change
if (!string.IsNullOrEmpty(lang))
{
Session["Culture"] = new CultureInfo(lang);
}
return Redirect(Request.UrlReferrer.ToString()); // RedirectToAction("Index");
}
У меня также есть этот метод в моем файле Global.cs
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Session != null)
{
CultureInfo ci = (CultureInfo)this.Session["Culture"];
if (ci == null)
{
string langName = "en";
//Try to get values from Accept lang HTTP header
//if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
//{
// langName = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);
//}
ci = new CultureInfo(langName);
this.Session["Culture"] = ci;
this.Session["UiClaim"] = false;
}
else
{
var lang = ((ClaimsIdentity)User.Identity).FindFirst(UserClaims.User_Language);
if (lang!=null && lang.Value!="None" && ci.Name!=lang.Value)
{
if (this.Session["UiClaim"].Equals(false))
{
ci = new CultureInfo(lang.Value);
this.Session["Culture"] = ci;
this.Session["UiClaim"] = true;
}
}
}
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}
}
Все контроллеры наследуют базовый контроллер, где находится действие SwitchUICulture. Outide в «Area» все работает отлично, но когда я в поле зренияв любой области это терпит неудачу, и я получаю этот URL
У кого-нибудь есть решение этой проблемы ??