Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Hisham Bin Ateya
Dieser Artikel enthält Anweisungen zum Diagnostizieren ASP.NET Core App Lokalisierungsprobleme.
Lokalisierungskonfigurationsprobleme
Lokalisierungs-Middleware-Reihenfolge
Die App wird möglicherweise nicht lokalisiert, da die Lokalisierungs-Middleware nicht wie erwartet sortiert ist.
Um dieses Problem zu beheben, stellen Sie sicher, dass die Lokalisierungs-Middleware vor der MVC-Middleware registriert ist. Andernfalls wird die Lokalisierungs-Middleware nicht angewendet.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc();
}
Lokalisierungsressourcenpfad nicht gefunden
Unterstützte Kulturen in RequestCultureProvider stimmen nicht mit den registrierten überein.
Probleme bei der Benennung von Ressourcendateien
ASP.NET Core verfügt über vordefinierte Regeln und Richtlinien für die Benennung von Lokalisierungsressourcendateien, die in der Globalisierung und Lokalisierung in ASP.NET Core beschrieben werden.
Missing resources (Fehlende Ressourcen)
Häufige Ursachen für nicht gefundene Ressourcen sind:
- Ressourcennamen sind in der .NET XML-Ressourcendatei (
.resx) oder in der Localizer-Anforderung falsch geschrieben. - Die Ressource fehlt in der Ressourcendatei für einige Sprachen, ist aber in anderen vorhanden.
- Wenn weiterhin Probleme auftreten, überprüfen Sie die Lokalisierungsprotokollmeldungen (protokolliert auf
DebugProtokollebene), um weitere Details zu den fehlenden Ressourcen zu erhalten.
Tipp
Überprüfen Sie bei der Verwendung von CookieRequestCultureProvider, dass innerhalb des Lokalisierungswerts cookie keine einfachen Anführungszeichen verwendet werden. Ist beispielsweise c='en-UK'|uic='en-US' ein ungültiger cookie Wert, während c=en-UK|uic=en-US er gültig ist.
Probleme mit Ressourcen und Klassenbibliotheken
ASP.NET Core bietet standardmäßig eine Möglichkeit, damit die Klassenbibliotheken auf ihre Ressourcendateien über ResourceLocationAttribute zugreifen können.
Häufige Probleme mit Klassenbibliotheken umfassen:
- Das Fehlen von ResourceLocationAttribute in einer Klassenbibliothek verhindert, dass ResourceManagerStringLocalizerFactory die Ressourcen findet.
- Ressourcen-Dateibenennung. Weitere Informationen finden Sie im Abschnitt " Ressourcendateibenennungsprobleme ".
- Ändern des Stammnamespaces der Klassenbibliothek. Weitere Informationen finden Sie im Abschnitt "Probleme mit dem Stammnamespace ".
CustomRequestCultureProvider funktioniert nicht wie erwartet
Die RequestLocalizationOptions Klasse verfügt über drei Standardanbieter:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
Auf CustomRequestCultureProvider diese Weise können Sie anpassen, wie die Lokalisierungskultur bereitgestellt wird. Dies CustomRequestCultureProvider wird verwendet, wenn die Standardanbieter Ihre Anforderungen nicht erfüllen.
Ein häufiger Grund dafür, dass ein benutzerdefinierter Anbieter nicht ordnungsgemäß funktioniert, besteht darin, dass es sich nicht um den ersten Anbieter in der RequestCultureProviders Liste handelt. So beheben Sie dieses Problem:
Fügen Sie den benutzerdefinierten Anbieter an Position 0 in die RequestCultureProviders Liste ein:
options.AddInitialRequestCultureProvider( new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
Fügen Sie den benutzerdefinierten Anbieter an Position 0 in die RequestCultureProviders Liste ein:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => { // My custom request culture logic return new ProviderCultureResult("en"); }));
- Verwenden Sie die AddInitialRequestCultureProvider Erweiterungsmethode, um den benutzerdefinierten Anbieter als anfänglichen Anbieter festzulegen.
Probleme mit stammnamespaces
Wenn der Stammnamespace einer Assembly anders als der Assemblyname ist, funktioniert die Lokalisierung nicht standardmäßig. Um dieses Problem zu vermeiden, verwenden Sie das RootNamespace Attribut, das in der Globalisierung und Lokalisierung in ASP.NET Core beschrieben wird.
Warnung
Ein Problem mit dem Stammnamespace kann auftreten, wenn der Name eines Projekts kein gültiger .NET-Bezeichner ist. Verwendet beispielsweise my-project-name.csproj den Stammnamespace my_project_name und den Assemblynamen my-project-name, was zu diesem Fehler führt.
Ressourcen und Build-Aktion
Wenn Sie Ressourcendateien für die Lokalisierung verwenden, ist es wichtig, dass sie über eine entsprechende Buildaktion verfügen.
Eingebettete Ressource verwenden; andernfalls können diese ResourceStringLocalizer Ressourcen nicht gefunden werden.
Standortüberschreibung mithilfe des Bereichs „Sensoren“ in den Entwicklertools
Wenn Sie die Standortüberschreibung mithilfe des Bereichs Sensoren in den Entwicklertools von Google Chrome oder Microsoft Edge verwenden, wird die Fallbacksprache nach dem Vorabrendering zurückgesetzt. Vermeiden Sie das Festlegen der Sprache mithilfe des Bereichs Sensoren beim Testen. Legen Sie die Sprache mithilfe der Spracheinstellungen des Browsers fest.
Weitere Informationen finden Sie unter Blazor. Die Lokalisierung funktioniert nicht mit InteractiveServer (dotnet/aspnetcore #53707).