Problembehandlung bei der ASP.NET Core-Lokalisierung
Von Hisham Bin Ateya
Dieser Artikel enthält Anweisungen für die Diagnose von Problemen mit der Lokalisierung von ASP.NET Core-Apps.
Probleme bei der Lokalisierungskonfiguration
Reihenfolge der Lokalisierungsmiddleware
Die App kann möglicherweise nicht lokalisiert werden, da die Lokalisierungsmiddleware nicht in der erwarteten Reihenfolge angeordnet ist.
Um dieses Problem zu beheben, stellen Sie sicher, dass die Lokalisierungsmiddleware vor der MVC-Middleware registriert wurde. Andernfalls wird die Lokalisierungsmiddleware nicht angewendet.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
Pfad der Lokalisierungsmiddleware nicht gefunden
Unterstützte Kulturen im RequestCultureProvider entsprechen nicht der einmaligen Registrierung
Probleme mit dem Ressourcendateinamen
ASP.NET Core verfügt über vordefinierte Regeln und Richtlinien für die Benennung von Lokalisierungsressourcendateien, die hier im Detail beschrieben werden.
Fehlende Ressourcen
Häufige Ursachen, warum Ressourcen nicht gefundenen werden, sind:
- Ressourcennamen sind entweder in der
resx
-Datei oder der Lokalisierungsanforderung falsch geschrieben. - Die Ressource fehlt für einige Sprachen in
resx
, ist für andere aber vorhanden. - Wenn weiterhin Probleme auftreten, überprüfen Sie die Protokollmeldungen der Lokalisierung (auf der
Debug
-Protokollebene) auf weitere Informationen zu den fehlenden Ressourcen.
Hinweis: Vergewissern Sie sich bei Verwendung von CookieRequestCultureProvider
, dass mit den Kulturen im Lokalisierungscookiewert keine einfachen Anführungszeichen verwendet werden. c='en-UK'|uic='en-US'
ist beispielsweise ein ungültiger cookiewert, während c=en-UK|uic=en-US
gültig ist.
Probleme mit Ressourcen und Klassenbibliotheken
ASP.NET Core stellt standardmäßig eine Methode zur Verfügung, Klassenbibliotheken zu ermöglichen, ihre Ressourcendateien über ResourceLocationAttribute zu finden.
Folgende Probleme mit Klassenbibliotheken treten häufig auf:
- Das Fehlen von
ResourceLocationAttribute
in einer Klassenbibliothek verhindert, dassResourceManagerStringLocalizerFactory
die Ressourcen ermitteln kann. - Ressourcendateinamen. Weitere Informationen finden Sie unter Probleme mit dem Ressourcendateinamen.
- Ändern des Stammnamespace der Klassenbibliothek. Weitere Informationen finden Sie unter Probleme mit dem Stammnamespace Abschnitt.
CustomRequestCultureProvider funktioniert nicht wie erwartet
Die RequestLocalizationOptions
-Klasse verfügt über drei Standardanbieter:
QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider
Mit CustomRequestCultureProvider können Sie anpassen, wie die Lokalisierungskultur in Ihrer App bereitgestellt wird. CustomRequestCultureProvider
wird verwendet, wenn die Standardanbieter Ihren Anforderungen nicht entsprechen.
Ein häufiger Grund dafür, dass ein benutzerdefinierter Anbieter nicht ordnungsgemäß funktioniert, besteht darin, dass er nicht der erste Anbieter in der
RequestCultureProviders
-Liste ist. So beheben Sie dieses Problem:Fügen Sie den benutzerdefinierten Anbieter wie folgt an der Position 0 in die
RequestCultureProviders
Liste ein:
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");
}));
- Verwenden Sie die
AddInitialRequestCultureProvider
-Erweiterungsmethode, um den benutzerdefinierten Anbieter als ersten Anbieter festzulegen.
Probleme mit dem Stammnamespace
Wenn der Stammnamespace einer Assembly sich vom Assemblynamen unterscheidet, funktioniert die Lokalisierung standardmäßig nicht. Um dieses Problem zu vermeiden, verwenden Sie RootNamespace, das hier im Detail beschrieben wird.
Warnung
Dies kann vorkommen, wenn der Name eines Projekts kein gültiger .NET-Bezeichner ist. Beispielsweise verwendet my-project-name.csproj
den Stammnamespace my_project_name
und den Assemblynamen my-project-name
, der zu diesem Fehler führt.
Ressourcen und Buildaktion
Wenn Sie Ressourcendateien für die Lokalisierung verwenden, ist es wichtig, dass sie über eine geeignete Buildaktion verfügen. Sie sollten eine eingebettete Ressource sein, andernfalls kann ResourceStringLocalizer
diese Ressourcen nicht finden.
GitHub-Issues mit hilfreichen Tipps zur Problemlösung
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für