我已在我的 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 页面。
更改您的
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);
}