ASP.Net MVC Core отказывается правильно устанавливать текущую культуру для представлений

Пожалуйста, помогите мне, потому что я схожу с ума здесь :-(

Я пытаюсь понять, как работает ASP.Net MVC Core Localization. Я работал по учебнику MS, но безрезультатно.

Короче говоря: я настраиваю RequestLocalizationOptions по умолчанию на иврит (he-IL). У меня есть соответствующие файлы ресурсов в структуре каталогов, основанной на моих представлениях (и я знаю, что это работает, потому что изменение ресурсов в файле ресурсов en-US по умолчанию отражается в пользовательском интерфейсе).

Когда я запускаю свое приложение, мое представление локализуется на английский, а не на иврит.

Бонусная странность: Thread.CurrentThread.CurrentUICulture действительно устанавливается на he-IL, когда я прерываю код Startup.cs, но затем он снова устанавливается на en-US для всех других потоков, что я проверяю в представлении, печатая <H2>@Thread.CurrentThread.CurrentUICulture.Name</H2>. Я попытался установить как Thread.CurrentThread.CurrentUICulture, так и CultureInfo.DefaultThreadCurrentUICulture в действиях моего контроллера, но это не сработало.

В принципе:

    // Startup.cs
    private static void ConfigureServices(IServiceCollection services)
    {
        // localization
        services
            .AddLocalization(options => options.ResourcesPath = "Resources");
        services.Configure<RequestLocalizationOptions>(options =>
        {
            var hebrew = new CultureInfo("he-IL");
            var usEnglish = new CultureInfo("en-US");

            var supportedCultures = new[]
            {
                hebrew, usEnglish
            };

            options.DefaultRequestCulture = new RequestCulture(hebrew, hebrew);
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;
        });

        // MVC
        services.AddMvc((options) => { options.Filters.Add(new RequireHttpsAttribute()); })
            .AddViewLocalization()
            .AddDataAnnotationsLocalization();

        // other configurations go here...
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // localization
        var localizationOption = app
            .ApplicationServices
            .GetService<IOptions<RequestLocalizationOptions>>();
        app.UseRequestLocalization(localizationOption.Value);

        // other configurations go here...
    }

Затем в любом представлении:

    @using Microsoft.AspNetCore.Mvc.Localization
    @using System.Threading

    @inject IViewLocalizer Localizer

    <H1>@Localizer["Test string"]</H1>
    <H2>@Thread.CurrentThread.CurrentUICulture.Name</H2>

Результат, который я получаю:

<H1>Test string</H1>
<H2>en-US</H2>

должно быть:

<H1>טקסט בעברית</H1>
<H2>he-IL</H2>

person user884248    schedule 21.11.2019    source источник
comment
Что произойдет, если вы попытаетесь добавить строку запроса - ?culture=he-IL&ui-culture=he-IL   -  person bsod_    schedule 21.11.2019
comment
@bsod_ - когда я добавляю эту строку запроса, я получаю правильный результат ... но мне нужно грамматически установить культуру внутри приложения! Как я могу это сделать? Почему код Microsoft (выше) не работает?   -  person user884248    schedule 21.11.2019
comment
Вы смотрели на этот ответ?   -  person Dave Barnett    schedule 30.11.2019
comment
Отвечает ли это на ваш вопрос? Языком по умолчанию ASP .NET Core всегда является английский   -  person Loaderon    schedule 29.11.2020