Как культура по умолчанию выбирается локально - (и почему нет при работе в Azure) - PullRequest
1 голос
/ 07 октября 2019

Я создаю, затем запускаю свой сайт asp.net CORE в Visual Studio, и я загружаю свои локализованные ресурсы, как только сайт запускается, по умолчанию, т.е. на английском языке.

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddLocalization(options => options.ResourcesPath = "Resources");

        services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new[]
            {
                new CultureInfo("sv-SE"),
                new CultureInfo("en-GB"),
                new CultureInfo("fr-FR")
            };

            // Explicitly state numbers/dates etc.
            options.SupportedCultures = supportedCultures;
            // Explicitly state UI strings (e.g. localised strings)
            options.SupportedUICultures = supportedCultures;

            // etc...

            services.AddMvc().AddViewLocalization();
        });
    }

Однако, когда я публикую это в Azure и посещаю сайт, язык по умолчанию не задействован, он дает мне все @SharedLocalizer имена переменных. Если я затем выберу язык, все будет работать так, как задумано, поэтому у меня останутся два вопроса:

1) При запуске моего сайта в VS как / где он устанавливает культуру по умолчанию?

2) Как я могу заставить свой сайт делать это при публикации через Azure?

У меня есть этот метод в моем контроллере home / index, но он устанавливает язык на основе выбора пользователя - как это происходит автоматически, когда язапускаю его в VS?!

    public IActionResult SetLanguage(string culture, string returnUrl)
    {
        CultureInfo ci = new CultureInfo(culture);
        CultureInfo.DefaultThreadCurrentCulture = ci;
        CultureInfo.DefaultThreadCurrentUICulture = ci;
        return Redirect(returnUrl);
    }

1 Ответ

0 голосов
/ 08 октября 2019

Вы не установили DefaultRequestCulture для RequestLocalizationOptions.

services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
        {
            new CultureInfo("sv-SE"),
            new CultureInfo("en-GB"),
            new CultureInfo("fr-FR")
        };

        // State what the default culture for your application is. This will be used if no specific culture
        // can be determined for a given request.
        options.DefaultRequestCulture = new RequestCulture("sv-SE"),
        // Explicitly state numbers/dates etc.
        options.SupportedCultures = supportedCultures;
        // Explicitly state UI strings (e.g. localised strings)
        options.SupportedUICultures = supportedCultures;
   }

См. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.0#localization-middleware

Обновление:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
        app.UseRequestLocalization(locOptions.Value);
        //other middlewares
        app.UseMVc();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...