Я следую принципам глобализации и локализации и Создание простого многоязычного Учебники на веб-сайте ASP.NET Core по добавлению языкового переключателя для моего приложения.
Итак, я создал частичное представление
@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
Когда я загружаю Home View, у меня выбран испанский вариант. Но когда я пытаюсь выбрать «английский», он загружается, но откатывает испанскую версию, поэтому я не могу окончательно увидеть свой контент на английском языке. В чем проблема?