Résoudre les problèmes liés à la localisation ASP.NET CoreTroubleshoot ASP.NET Core Localization

Par Hisham Bin AteyaBy Hisham Bin Ateya

Cet article fournit des instructions sur la façon de diagnostiquer les problèmes de localisation des applications ASP.NET Core.This article provides instructions on how to diagnose ASP.NET Core app localization issues.

Problèmes de configuration de la localisationLocalization configuration issues

Ordre de l’Intergiciel (middleware) de localisationLocalization middleware order
Il est possible que la localisation de l’application ne s’effectue pas car le middleware de localisation ne respecte pas l’ordre prévu.The app may not localize because the localization middleware isn't ordered as expected.

Pour résoudre ce problème, vérifiez que le middleware de localisation est inscrit avant le middleware MVC.To resolve this issue, ensure that localization middleware is registered before MVC middleware. Sinon, le middleware de localisation n’est pas appliqué.Otherwise, the localization middleware isn't applied.

public void ConfigureServices(IServiceCollection services)
{
    services.AddLocalization(options => options.ResourcesPath = "Resources");

    services.AddMvc();
}

Le chemin des ressources de localisation est introuvableLocalization resources path not found

Les cultures prises en charge dans RequestCultureProvider ne correspondent pas à celles inscritesSupported Cultures in RequestCultureProvider don't match with registered once

Problèmes liés au nommage des fichiers de ressourcesResource file naming issues

ASP.NET Core a des règles prédéfinies et des instructions concernant le nommage des fichiers de ressources de localisation. Elles sont décrites en détail ici.ASP.NET Core has predefined rules and guidelines for localization resources file naming, which are described in detail here.

Ressources manquantesMissing resources

Les causes courantes de ressources introuvables sont notamment les suivantes :Common causes of resources not being found include:

  • Les noms des ressources sont mal orthographiés dans le fichier resx ou la requête à l’outil de localisation.Resource names are misspelled in either the resx file or the localizer request.
  • La ressource est manquante dans le resx pour certaines langues, mais elle existe dans d’autres.The resource is missing from the resx for some languages, but exists in others.
  • Si le problème persiste, vérifiez les messages du journal de localisation (qui se trouvent au niveau du journal Debug) pour obtenir plus de détails sur les ressources manquantes.If you're still having trouble, check the localization log messages (which are at Debug log level) for more details about the missing resources.

Conseil : Quand vous utilisez CookieRequestCultureProvider, vérifiez que des guillemets simples ne sont pas utilisés avec les cultures à l’intérieur de la valeur des cookies de localisation. Par exemple, c='en-UK'|uic='en-US' est une valeur de cookie non valide, tandis que c=en-UK|uic=en-US est valide.Hint: When using CookieRequestCultureProvider, verify single quotes are not used with the cultures inside the localization cookie value. For example, c='en-UK'|uic='en-US' is an invalid cookie value, while c=en-UK|uic=en-US is a valid.

Problèmes liés aux ressources et aux bibliothèques de classesResources & Class Libraries issues

ASP.NET Core fournit par défaut un moyen de permettre aux bibliothèques de classes de rechercher leurs fichiers de ressources par le biais de ResourceLocationAttribute.ASP.NET Core by default provides a way to allow the class libraries to find their resource files via ResourceLocationAttribute.

Les problèmes courants liés aux bibliothèques de classes sont les suivants :Common issues with class libraries include:

  • Le ResourceLocationAttribute manquant dans une classe de bibliothèque empêche ResourceManagerStringLocalizerFactory de découvrir les ressources.Missing the ResourceLocationAttribute in a class library will prevent ResourceManagerStringLocalizerFactory from discovering the resources.
  • Nommage des fichiers de ressources.Resource file naming. Pour plus d’informations, consultez la section Problèmes liés au nommage des fichiers de ressources.For more information, see Resource file naming issues section.
  • Changement de l’espace de noms racine de la bibliothèque de classes.Changing the root namespace of the class library. Pour plus d’informations, consultez la section Problèmes liés à l’espace de noms racine.For more information, see Root Namespace issues section.

CustomRequestCultureProvider ne fonctionne pas comme prévuCustomRequestCultureProvider doesn't work as expected

La classe RequestLocalizationOptions possède trois fournisseurs par défaut :The RequestLocalizationOptions class has three default providers:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

CustomRequestCultureProvider vous permet de personnaliser la façon dont la culture de localisation est fournie dans votre application.The CustomRequestCultureProvider allows you to customize how the localization culture is provided in your app. CustomRequestCultureProvider est utilisé quand les fournisseurs par défaut ne répondent pas à vos besoins.The CustomRequestCultureProvider is used when the default providers don't meet your requirements.

  • Une raison courante pour laquelle un fournisseur personnalisé ne fonctionne pas correctement est qu’il n’est pas le premier fournisseur dans la liste RequestCultureProviders.A common reason custom provider don't work properly is that it isn't the first provider in the RequestCultureProviders list. Pour résoudre ce problème :To resolve this issue:

  • Insérez le fournisseur personnalisé à la position 0 dans la liste RequestCultureProviders, comme suit :Insert the custom provider at the position 0 in the RequestCultureProviders list as the following:

options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
    {
        // My custom request culture logic
        return new ProviderCultureResult("en");
    }));
  • Utilisez la méthode d’extension AddInitialRequestCultureProvider pour définir le fournisseur personnalisé comme fournisseur initial.Use AddInitialRequestCultureProvider extension method to set the custom provider as initial provider.

Problèmes liés à l’espace de noms racineRoot Namespace issues

Si l’espace de noms racine d’un assembly est différent du nom de l’assembly, la localisation ne fonctionne pas par défaut.When the root namespace of an assembly is different than the assembly name, localization doesn't work by default. Pour éviter ce problème, utilisez RootNamespace, qui est décrit en détail ici.To avoid this issue use RootNamespace, which is described in detail here

Ressources et action de générationResources & Build Action

Si vous utilisez des fichiers de ressources pour la localisation, il est important qu’ils disposent d’une action de génération appropriée.If you use resource files for localization, it's important that they have an appropriate build action. Ils doivent être une ressource incorporée, sans quoi ResourceStringLocalizer n’est pas en mesure de trouver ces ressources.They should be Embedded Resource, otherwise the ResourceStringLocalizer is not able to find these resources.