ASP.NET Core, как вы форматируете даты по локализации посетителей? - PullRequest
0 голосов
/ 20 июня 2019

Как следует из заголовка, я хочу отформатировать даты в моем приложении ASP.NET Core, чтобы они форматировались для региона посетителя.

Например, в моей модели представления я сейчас определяю свою дату следующим образом;

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
public DateTime OpenDate { get; set; }

Как настроить приложение для использования локальных предпочтений посетителей?

Я попытался включить локализацию в моем файле запуска, поместив следующее перед использованием Mvc ();

app.UseRequestLocalization();

Затем в моем контроллере я попробовал следующее, но значение browserCulture всегда ПУСТО, если я не отредактирую свой файл запуска и не настрою культуру по умолчанию.

var locale = Request.HttpContext.Features.Get<IRequestCultureFeature>();
var browserCulture = locale.RequestCulture.UICulture.ToString();

Я определяю культуру по умолчанию с помощью;

services.Configure<RequestLocalizationOptions>(options =>
            {
                options.DefaultRequestCulture = new RequestCulture("en-GB");
            });

Я использовал Chrome, чтобы проверить, что мой браузер передает заголовок Accept-Language, и я могу подтвердить, что это так. Используя плагин Chrome, я также изменил свойство Accept-Language, чтобы оно отличалось от настройки культуры по умолчанию в приложении, т. Е. En-US, но это также не учитывается.

Что мне не хватает?

----- РАЗРЕШЕНИЕ -----

Как и предполагалось, мне нужно было настроить культуры, которые будет поддерживать приложение. Я изменил конфигурацию локализации в ConfigureServices в моем файле запуска следующим образом:

// Setup supported cultures
            var supportedCultures = new[]
            {
                new CultureInfo("en-US"),
                new CultureInfo("fr"),
                new CultureInfo("en-GB"),
                new CultureInfo("zh-TW")
            };
            services.Configure<RequestLocalizationOptions>(options =>
            {
                options.DefaultRequestCulture = new RequestCulture("en-GB");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });

1 Ответ

1 голос
/ 21 июня 2019

Кажется, вы не добавили культуры поддержки для RequestLocalizationOptions:

var supportedCultures = new[]
{
    new CultureInfo("en-US"),
    new CultureInfo("fr"),
    new CultureInfo("en-GB"),
    new CultureInfo("zh-TW"),
    // ...
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-GB"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...