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

Par Hisham Bin Ateya

Cet article fournit des instructions sur la façon de diagnostiquer les problèmes de localisation des applications ASP.NET Core.

Problèmes de configuration de la localisation

Ordre de l’Intergiciel (middleware) de localisation
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.

Pour résoudre ce problème, vérifiez que le middleware de localisation est inscrit avant le middleware MVC. Sinon, le middleware de localisation n’est pas appliqué.

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

    services.AddMvc();
}

Le chemin des ressources de localisation est introuvable

Les cultures prises en charge dans RequestCultureProvider ne correspondent pas à celles inscrites

Problèmes liés au nommage des fichiers de ressources

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.

Ressources manquantes

Les causes courantes de ressources introuvables sont notamment les suivantes :

  • Les noms des ressources sont mal orthographiés dans le fichier resx ou la requête à l’outil de localisation.
  • La ressource est manquante dans le resx pour certaines langues, mais elle existe dans d’autres.
  • 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.

Indicateur : 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 cookie 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.

Problèmes liés aux ressources et aux bibliothèques de classes

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.

Les problèmes courants liés aux bibliothèques de classes sont les suivants :

CustomRequestCultureProvider ne fonctionne pas comme prévu

La classe RequestLocalizationOptions possède trois fournisseurs par défaut :

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

CustomRequestCultureProvider vous permet de personnaliser la façon dont la culture de localisation est fournie dans votre application. CustomRequestCultureProvider est utilisé quand les fournisseurs par défaut ne répondent pas à vos besoins.

  • 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. Pour résoudre ce problème :

  • Insérez le fournisseur personnalisé à la position 0 dans la liste RequestCultureProviders, comme suit :

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.

Problèmes liés à l’espace de noms racine

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. Pour éviter ce problème, utilisez RootNamespace, qui est décrit en détail ici.

Avertissement

Cela peut se produire quand le nom d’un projet n’est pas un identificateur .NET valide. Par exemple, my-project-name.csproj utilisera l’espace de noms racine my_project_name et le nom de l’assembly my-project-name entraînant cette erreur.

Ressources et action de génération

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. Ils doivent être une ressource incorporée, sans quoi ResourceStringLocalizer n’est pas en mesure de trouver ces ressources.

Problèmes GitHub avec des conseils de résolution de problèmes utiles