如何在asp.net core razor和blazor页面中启用通过url和cookie选择文化?

问题描述 投票:0回答:1

我已在我的 asp.net core mvc 项目中应用了本地化。 它包括身份的 Blazor 页面。 我想通过更改网站网址的文化部分来更改文化。

域名/en/Home/索引

目前可以通过cookie改变文化。 这是饼干文化的转变

但是当我将网址的文化更改为 ja 时,文化并没有改变。 如何使两者互不限制?

我添加了以下代码以向 URL 添加区域性,但它不适用于 Blazor 页面。

app.MapControllerRoute(
    name: "default",
    pattern: "{culture}/{controller=First}/{action=Index}/{id?}"
);

我想将其应用到 Blazor 页面。 我添加了文化切换的部分内容。

<div>
    <form asp-action="CultureManagement" asp-controller="Home" method="post" asp-route-returnUrl="@returnUrl">
        <select name="cultureName" asp-for="@culture!.RequestCulture.UICulture.Name" class="selectpicker" data-width="fit" asp-items="@cultureList"
            onchange="this.form.submit();">
        </select>
    </form>
</div>

它只会更改 cookie。

[HttpPost]
public IActionResult CultureManagement(string cultureName, string returnUrl)
{
    Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName,
        CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName)),
        new CookieOptions { Expires = DateTimeOffset.Now.AddDays(30) });
    return LocalRedirect(returnUrl);
}

我想通过更改 url 和 cookie 来改变文化。 并且还想应用于 blazor 页面。

asp.net-mvc asp.net-core blazor asp.net-identity asp.net-core-localization
1个回答
0
投票

更改您的

CultureManagement
方法,如下所示。

并确保切换到其他页面时您的

returnUrl
正确。

    [HttpPost]
    public IActionResult CultureManagement(string cultureName, string returnUrl)
    {
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName)),
            new CookieOptions { Expires = DateTimeOffset.UtcNow.AddDays(30) }
        );


        var uri = new Uri(string.Concat(Request.Scheme, "://", Request.Host, returnUrl));
        var pathAndQuery = uri.PathAndQuery;

        var newPathAndQuery = Regex.Replace(pathAndQuery, "^/[^/]+", $"/{cultureName}");

        return Redirect(newPathAndQuery);
    }

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.