gpt4 book ai didi

asp.net-core - ASP.NET Core Web 应用程序中的语言未更改

转载 作者:行者123 更新时间:2023-12-01 14:59:49 28 4
gpt4 key购买 nike

我关注 Globalization and localizationBuilding simple multilingual ASP.NET Core website为我的应用程序添加语言切换的教程。

所以,我创建了一个局部 View

@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions

@{
var requestCulture = Context.Features.Get<IRequestCultureFeature>();
var cultureItems = LocOptions.Value.SupportedUICultures
.Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
.ToList();
}

<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage" asp-controller="Home"
asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path"
method="post" class="form-horizontal" role="form">
@Localizer["Language:"]
<select name="culture"
onchange="this.form.submit();"
asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems"></select>
</form>
</div>

_Layout 的页脚中添加这
<div class="col-md-6 text-right">
@await Html.PartialAsync("_SelectLanguagePartial")
</div>

并像这样配置 Startup.cs:
services.AddLocalization(options => options.ResourcesPath = "Resources");

services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();

services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("es"),
new CultureInfo("en")
};

options.DefaultRequestCulture = new RequestCulture(culture: "es", uiCulture: "es");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;

});

我加了一个 Resources文件夹中的
Views.Home.Index.es.resx
Views.Home.Index.en.resx
Views.Shared._Layout.es.resx
Views.Shared._Layout.en.resx

我也做了 Install-Package Microsoft.AspNetCore.Authentication.Cookies
当我加载主页 View 时,我选择了西类牙语选项。但是当我尝试选择“英语”时,它会加载,但会回滚西类牙语版本,因此我最终无法看到我的英语内容。问题出在哪儿?

最佳答案

即使您使用 Joe Auddette 的答案更新了代码,也为那些没有使其工作的人添加额外的答案。
CookieOptions阻止我很长时间才能使事情正常进行:

[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true, //critical settings to apply new culture
Path = "/",
HttpOnly = false,
}
);

return LocalRedirect(returnUrl);
}
IsEssential在源代码中有以下注释:

Indicates if this cookie is essential for the application to function correctly. If true then consent policy checks may be bypassed. The default value is false.



consent policy设置在 startup.cs
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});

关于asp.net-core - ASP.NET Core Web 应用程序中的语言未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282853/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com