web-dev-qa-db-fra.com

Localisation ASP.NET Core MVC Avertissement: AcceptLanguageHeaderRequestCultureProvider a renvoyé les cultures non prises en charge suivantes

J'ai une application ASP.NET Core MVC qui utilise la localisation des ressources. Il ne supporte actuellement qu'une seule culture (fa-IR) et je souhaite que toutes les localisations soient traitées en fonction de cette culture. Dans ASP.NET Core 1.1, je n'ai aucun problème, mais après avoir migré d'ASP.NET Core 1.1 à 2.1, je vois cet avertissement pour chaque requête HTTP:

AcceptLanguageHeaderRequestCultureProvider a renvoyé les cultures non prises en charge suivantes 'en-US, en, fa'.

C'est ma startup:

public class Startup
{
    protected CultureInfo DefaultCultureInfo { get; private set; } = new CultureInfo("fa-IR");

    public void ConfigureServices(IServiceCollection services)
    {
        CultureInfo.DefaultThreadCurrentCulture = DefaultCultureInfo;
        CultureInfo.DefaultThreadCurrentUICulture = DefaultCultureInfo;
        services.AddLocalization(options => { options.ResourcesPath = "Resources"; });

        services.AddMemoryCache();
        services.AddSession();

        services.AddMvc()
        .AddDataAnnotationsLocalization()
        .AddViewLocalization()
        .AddControllersAsServices()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
        .AddSessionStateTempDataProvider();

        services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new[] { new CultureInfo("fa-IR"), new CultureInfo("en-US") };
            options.DefaultRequestCulture = new RequestCulture("fa-IR", "fa-IR");
            options.SupportedCultures = supportedCultures;
            options.SupportedUICultures = supportedCultures;

            options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
            {
                return new ProviderCultureResult("fa-IR");
            }));
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        var supportedCultures = new[] { DefaultCultureInfo };
        app.UseRequestLocalization(new RequestLocalizationOptions()
        {
            DefaultRequestCulture = new RequestCulture(DefaultCultureInfo),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures,
            FallBackToParentCultures = true,
            FallBackToParentUICultures = true,
        });

        app.UseSession();
        app.UseMvc();
        app.UseCookiePolicy();
    }
}

En fait, il ne s'agit que d'un avertissement. Mon application fonctionne correctement, mais mes fichiers journaux sont remplis par cet avertissement. Je cherche donc un moyen de faire savoir à MVC ce que je veux.

[Modifier]: J'ai ajouté CustomRequestCultureProvider mais je n'ai aucun effet et après avoir placé un point d'arrêt dans cette ligne, j'ai réalisé que cette ligne n'était pas touchée.

[Edit2]: Comme user2429841 l'a suggéré, j'ai ajouté "fa" à la prise en chargeCultures. Les avertissements ont disparu, mais mes fichiers de ressources (nommés x.fa-IR.resx) ne sont plus repris. Existe-t-il un moyen de dire à MVC que si vous avez une culture, traitez-la comme une autre culture?

5
HamedH

Comme documenté vous pouvez filtrer la journalisation en spécifiant les niveaux de journalisation minimum par fournisseur.

Dans votre configuration appsettings.json Logging, ajoutez Microsoft.AspNetCore.Localization et définissez la valeur sur Error. Dans ce cas, les messages n'apparaîtront plus dans le journal.

"Logging": {
  "IncludeScopes": false,
  "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information",
    "Microsoft.AspNetCore.Localization": "Error"  // <-- Disables the warnings
  }
},
2
Ruard van Elburg
services.AddOptions();            

Ajouter cette ligne à votre méthode de configuration

app.UseRequestLocalization(
  app.ApplicationServices.GetService<IOptions<RequestLocalizationtions>>().Value);
1
Kakos649

C'est votre navigateur Web qui envoie 'en-US, en, fa' dans l'en-tête Accept-Language-HTTP-Aspire et le noyau asp.net vous indiquent que vous ne supportez aucune de ces cultures.

La réponse de Kakos649 n’a aucun sens, car si vous résolvez votre instance RequestLocalizationtions sur le service d’options, le résultat sera identique.

EDIT: Si vous utilisez l'une de ces langues, l'avertissement disparaît.

0
user2429841