Partager via


Résoudre les problèmes de localisation ASP.NET Core

Par Hisham Bin Ateya

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

Problèmes de configuration de localisation

Ordre des intergiciels de localisation
L'application peut ne pas se localiser, car le middleware de localisation n'est pas ordonné comme prévu.

Pour résoudre ce problème, assurez-vous que l’intergiciel de localisation est inscrit avant l’intergiciel MVC. Sinon, le middleware de localisation n’est pas appliqué.

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

    services.AddMvc();
}

Chemin des ressources de localisation introuvable

Les cultures prises en charge dans RequestCultureProvider ne correspondent pas aux cultures inscrites une seule fois

Problèmes d’affectation de noms de fichiers de ressources

ASP.NET Core a des règles et des instructions prédéfinies pour le nommage des fichiers de ressources de localisation, qui sont décrites dans la globalisation et la localisation dans ASP.NET Core.

Ressources manquantes

Les causes courantes des ressources introuvables sont les suivantes :

  • Les noms de ressources sont mal orthographiés dans le fichier de ressources .NET XML (.resx) ou la demande de localiseur.
  • La ressource est manquante dans le fichier de ressources pour certaines langues, mais existe dans d’autres.
  • Si vous rencontrez toujours des problèmes, consultez les messages de journal de localisation (enregistrés au niveau de journal Debug) pour plus d'informations sur les ressources manquantes.

Conseil / Astuce

Lorsque vous utilisez CookieRequestCultureProvider, vérifiez que les guillemets uniques ne sont pas utilisés avec les cultures à l’intérieur de la valeur de localisation cookie . Par exemple, c='en-UK'|uic='en-US' est une valeur cookie non valide, tandis que c=en-UK|uic=en-US est valable.

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

ASP.NET Core par défaut permet aux bibliothèques de classes de trouver leurs fichiers de ressources via ResourceLocationAttribute.

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

CustomRequestCultureProvider ne fonctionne pas comme prévu

La RequestLocalizationOptions classe a trois fournisseurs par défaut :

Le CustomRequestCultureProvider permet de personnaliser la manière dont la culture de localisation est fournie. Il CustomRequestCultureProvider est utilisé lorsque les fournisseurs par défaut ne répondent pas à vos besoins.

Une raison courante pour un fournisseur personnalisé de ne pas fonctionner correctement est qu’il n’est pas le premier fournisseur de la RequestCultureProviders liste. Pour résoudre ce problème :

  • Insérez le fournisseur personnalisé à la position zéro dans la RequestCultureProviders liste :

    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 RequestCultureProviders liste :

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

Problèmes d’espace de noms racine

Lorsque 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’attributRootNamespace, 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 de l’assembly my-project-name, ce qui entraîne cette erreur.

Ressources et action de construction

Si vous utilisez des fichiers de ressources pour la localisation, il est important qu’ils aient une action de génération appropriée. Utiliser la ressource incorporée ; sinon, il ResourceStringLocalizer n’est pas en mesure de trouver ces ressources.

Remplacement de l’emplacement en utilisant le volet « Capteurs » dans les outils de développement

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

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

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