Локализация страниц Razor на основе запросов в Asp. Net Core - PullRequest
1 голос
/ 03 марта 2020

Мое приложение размещено на сервере, расположенном в США. Я живу в Великобритании. Когда я открываю страницу локально, я вижу правильный формат даты dd/mm/yyyy в зависимости от того, где я живу, однако, когда я развертываю приложение в Azure службе приложений США и открываю его в том же веб-браузере, который могу см. формат DateTime, измененный на культуру США mm/dd/yyyy enter image description here

Часть кода со страницы бритвы .cs html:

<br>
        <h2>Subscription</h2>
        <hr />

        <dl class="row">
            <dt class="col-sm-3">
                @Html.DisplayNameFor(model => model.Subscription.StartDate)
            </dt>
            <dd class="col-sm-9" id="StartDate">
                @Html.DisplayFor(model => model.Subscription.StartDate)
            </dd>
            ...

            <dt class="col-sm-3">
                @Html.DisplayNameFor(model => model.Subscription.EndDate)
            </dt>
            <dd class="col-sm-9" id="EndDate">
                @Html.DisplayFor(model => model.Subscription.EndDate)
            </dd>

        </dl>

Я играл с изменением способа отображения даты, у меня была идея применить CultureInfo.InvariantCulture, и я закончил с sth. как

@(Model.Subscription.EndDate.ToString(CultureInfo.InvariantCulture))

но это все равно не помогает. Я понимаю, что страница генерируется на сервере, однако, есть ли способ, как я могу отобразить StartDate / EndDate на основе настроек браузера, а не сервера один раз? Может быть, мне нужно использовать расширение javascript, чтобы добиться того, чего я хочу? Можно ли определить глобальное правило для отображения всех дат в формате клиента для всего приложения RazorPages? Приветствия

1 Ответ

1 голос
/ 04 марта 2020

То, что вы ищете, является эквивалентом enableClientBasedCulture в классе c ASP. NET:

<system.web>
    <globalization enableClientBasedCulture="true" ... />
</system.web>

Для современных ASP. Net приложений (которые на основе ) вам нужно полагаться на промежуточное ПО для достижения (примерно) тех же результатов.

В вашем Startup.cs:

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US"),
});

Некоторые различия:

  • classi c enableClientBasedCulture использует только заголовок HTTP Accept для определения культуры, в то время как новое промежуточное ПО пытается выполнить из строки запроса и файлы cookie.

  • Classi c enableClientBasedCulture будет сопоставляться с любой запрашиваемой культурой, поддерживаемой ОС, в то время как для нового промежуточного программного обеспечения требуются все поддерживаемые культуры. определены.

Более подробное обсуждение см. https://github.com/dotnet/aspnetcore/issues/2649

...