Résoudre des 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 et des instructions prédéfinies concernant l’attribution de nom des fichiers de ressources de localisation. Elles sont décrites dans Globalisation et localisation dans ASP.NET Core.

Ressources manquantes

Les causes courantes de ressources introuvables sont notamment les suivantes :

  • Les noms des ressources sont mal orthographiés dans le fichier de ressources .NET XML (.resx) ou la requête de localisateur.
  • La ressource est manquante dans le fichier de ressources pour certaines langues, mais elle existe dans d’autres.
  • Si le problème persiste, vérifiez les messages du journal de localisation (enregistrés au niveau du journal Debug) pour obtenir plus d’informations sur les ressources manquantes.

Conseil

Lors de l’utilisation de CookieRequestCultureProvider, vérifiez que des guillemets simples ne sont pas utilisés avec les cultures à l’intérieur de la valeur de cookie de localisation. Par exemple, c='en-UK'|uic='en-US' est une valeur de cookie non valide, alors 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 :

CustomRequestCultureProvider vous permet de personnaliser la façon dont la culture de localisation est fournie. 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 zéro dans la liste RequestCultureProviders :

    options.AddInitialRequestCultureProvider(
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    
  • Insérez le fournisseur personnalisé à la position zéro dans la liste RequestCultureProviders :

    options.RequestCultureProviders.Insert(0, 
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    

Problèmes liés à un 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 l’attribut RootNamespace qui est décrit dans Globalisation et localisation dans ASP.NET Core.

Avertissement

Un problème d’espace de noms racine peut se produire quand le nom d’un projet n’est pas un identificateur .NET valide. Par exemple, my-project-name.csproj utilise l’espace de noms racine my_project_name et le nom d’assembly my-project-name, ce qui entraîne 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. Utilisez une Ressource incorporée, sans quoi ResourceStringLocalizer n’est pas en mesure de trouver ces ressources.

Remplacement de localisation en utilisant le volet « Capteurs » dans les outils de développement

Lorsque vous utilisez le remplacement de localisation en tirant parti du volet Capteurs dans les outils de développement Google Chrome ou Microsoft Edge, le langage de secours est réinitialisé après le prérendu. Évitez de définir le langage en utilisant le volet Capteurs lors de tests. Définissez le langage en tirant parti des paramètres de langage du navigateur.

Pour obtenir plus d’informations, consultez Blazor La localisation ne fonctionne pas avec InteractiveServer (dotnet/aspnetcore #53707).

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