Язык ASP .NET Core по умолчанию всегда английский

Я установил локализацию, как описано в блоге Microsoft, но языком по умолчанию всегда является английский. Вот так выглядит мой Startup.cs в отношении локализации.

CultureInfo[] supportedCultures = new[]
            {
                new CultureInfo("ar"),
                new CultureInfo("en") 
            };

В методе ConfigureServices:

    services.Configure<RequestLocalizationOptions>(options =>
        {
            options.DefaultRequestCulture = new RequestCulture("ar", "ar");
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;
        });
        services.AddLocalization(options =>
        {
            options.ResourcesPath = "Resources";
        });


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

В настройке метода:

        app.UseRequestLocalization(new RequestLocalizationOptions()
        {
            DefaultRequestCulture = new RequestCulture("ar"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });

Спасибо:)

1 ответ

Решение

Вы устанавливаете "арабский" как DefaultRequestCulture но DefaultRequestCulture используется, если ни один из встроенных поставщиков не может определить культуру запроса. Поставщики по умолчанию:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

Скорее всего, культура определяется из HTTP-заголовка Accept-Language, который отправляет браузер.

Вы должны удалить AcceptLanguageHeaderRequestCultureProvider для того, чтобы отступить DefaultRequestCulture, Для этого мы можем перезаписать RequestCultureProviders список RequestLocalizationOptions и использовать только двух других провайдеров. В Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    CultureInfo[] supportedCultures = new[]
    {
        new CultureInfo("ar"),
        new CultureInfo("en")
    };

    services.Configure<RequestLocalizationOptions>(options =>
    {
        options.DefaultRequestCulture = new RequestCulture("ar");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;
        options.RequestCultureProviders = new List<IRequestCultureProvider>
        {
            new QueryStringRequestCultureProvider(),
            new CookieRequestCultureProvider()
        };
    });
}

И в Configure метод просто использовать app.UseRequestLocalization(); до app.UseMvc();

Если вы используете вызов Ajax для установки культуры и ответа клиенту с результатом Json.

Вы должны установить значение cookie, соответствующее ASP.Net, как показано ниже на уровне браузера. в противном случае локализатор не сможет найти правильную культуру со значением cookie.

                var date = new Date();
                date.setTime(date.getTime() + (30*24*60*60*1000));
                expires = "; expires=" + date.toUTCString();
                document.cookie = '.AspNetCore.Culture' + "=c=" + (data.message || "ko-KR") + "|uic=" +(data.message || "ko-KR")  + expires + "; path=/";
                window.location.reload();

Благодарю вас

Другие вопросы по тегам