Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- L’absence de ResourceLocationAttribute dans une bibliothèque de classes empêche ResourceManagerStringLocalizerFactory de découvrir les ressources.
- Nommage des fichiers de ressources. Pour plus d’informations, consultez la section Problèmes de nommage des fichiers de ressources .
- Modification de l’espace de noms racine de la bibliothèque de classes. Pour plus d’informations, consultez la section Problèmes liés à l’espace de noms racine .
CustomRequestCultureProvider ne fonctionne pas comme prévu
La RequestLocalizationOptions classe a trois fournisseurs par défaut :
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
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"); }));
- Utilisez la méthode d’extension AddInitialRequestCultureProvider pour définir le fournisseur personnalisé comme fournisseur initial.
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).