Локализация области в MVC с переключателем языка - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть приложение MVC с локализацией. Это работало замечательно, пока я не добавил Области в свое приложение. Я использовал этот переключатель языка для переключения между доступными языками.

Language switcher

Вот 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

URL when switching language

У кого-нибудь есть решение этой проблемы ??

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Это было так просто, что решение было слишком близко :) Добавление области = "" к URL-адресу. Действие - это все, что нужно.

    <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", area = ""})" 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", area = "" })" 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>

это исправленный фрагмент кода

0 голосов
/ 03 ноября 2019

Я думаю, что URL-адрес пути неверен. Проверьте URL-адрес или укажите дополнительные контроллеры и области. Я помогу тебе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...