Freigeben über


Fehlerbehebung bei der ASP.NET Core-Lokalisierung

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 Debug Protokollebene), 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:

CustomRequestCultureProvider funktioniert nicht wie erwartet

Die RequestLocalizationOptions Klasse verfügt über drei Standardanbieter:

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");
        }));
    

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).

GitHub-Probleme mit hilfreichen Tipps zur Problemlösung