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 :
- Le
ResourceLocationAttribute
manquant dans une classe de bibliothèque empêcheResourceManagerStringLocalizerFactory
de découvrir les ressources. - Nommage des fichiers de ressources. Pour 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 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 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour