Изменение языка IStringLocalizer - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь динамически установить язык IStringLocalizer во время выполнения. Единственный доступный метод, который, кажется, делает это - IStringLocalizer.WithCulture. Однако попытка использовать его приводит к предупреждению об устаревании.

public IStringLocalizer GetLocalizer(string locale) {
    this.localizerFactory.Create(typeof(CommonResources)).WithCulture(new CultureInfo(locale));
}

Я не с использованием ASP, я делаю это в IHostedService который обрабатывает взаимодействие с пользователем из другого источника (различные API веб-чата). Эта служба должна соответствовать языку, установленному для сервера чата или канала администраторами (хранящимся в базе данных).

Каков правильный, текущий способ установки языка IStringLocalizer? Должен ли я использовать другой класс целиком?

1 Ответ

0 голосов
/ 14 марта 2020

вы можете написать свое собственное промежуточное программное обеспечение для культуры, которое может установить культурное значение на основе пользователя или, возможно, с помощью Http Header Accept-Language

app.UseRequestLocalization(roptions =>
        {
            IList<CultureInfo> supportedCultures = new List<CultureInfo>
            {
                new CultureInfo("en-US"),
                new CultureInfo("fr"),
            };
            roptions.DefaultRequestCulture = new RequestCulture("en-US");
            roptions.SupportedCultures = supportedCultures;
            roptions.SupportedUICultures = supportedCultures;
            roptions.RequestCultureProviders.Add(new YourCustomCultureProvider());
        });

Пример промежуточного программного обеспечения

public class YourCustomCultureProvider : RequestCultureProvider
{
    public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
    {
        if (httpContext == null)
            throw new ArgumentNullException(nameof(httpContext));


        var culture = //Some Logic

        if (string.IsNullOrEmpty(culture))
        {
            // No values specified for either so no match
            return Task.FromResult((ProviderCultureResult)null);
        }

        var requestCulture = new ProviderCultureResult(culture);

        return Task.FromResult(requestCulture);
    }
}

Перейдите по этой ссылке, если она может вам помочь - https://joonasw.net/view/aspnet-core-localization-deep-dive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...