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 :
- Le ResourceLocationAttribute manquant dans une bibliothèque de classes empêche ResourceManagerStringLocalizerFactory de découvrir les ressources.
- Nommage des fichiers de ressources. Pour obtenir plus d’informations, consultez la section Problèmes liés au nommage des fichiers de ressources.
- Changement de l’espace de noms racine de la bibliothèque de classes. Pour obtenir plus d’informations, consultez la section Problèmes liés à l’espace de noms racine.
CustomRequestCultureProvider
ne fonctionne pas comme prévu
La classe RequestLocalizationOptions possède trois fournisseurs par défaut :
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
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"); }));
- Utilisez la méthode d’extension AddInitialRequestCultureProvider pour définir le fournisseur personnalisé en tant que fournisseur initial.
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).