Felsöka ASP.NET Core-lokalisering

Av Hisham Bin Ateya

Den här artikeln innehåller instruktioner om hur du diagnostiserar ASP.NET Core-applokaliseringsproblem.

Problem med lokaliseringskonfiguration

Mellanprogramsordning för lokalisering
Appen kanske inte lokaliserar eftersom mellanprogrammet för lokalisering inte är ordnat som förväntat.

Lös problemet genom att se till att mellanprogram för lokalisering registreras före MVC-mellanprogram. Annars tillämpas inte mellanprogrammet för lokalisering.

public void ConfigureServices(IServiceCollection services)
{
    services.AddLocalization(options => options.ResourcesPath = "Resources");

    services.AddMvc();
}

Sökvägen för lokaliseringsresurser hittades inte

Kulturer som stöds i RequestCultureProvider matchar inte med registrerade en gång

Problem med namngivning av resursfiler

ASP.NET Core har fördefinierade regler och riktlinjer för namngivning av lokaliseringsresurser, som beskrivs i Globalisering och lokalisering i ASP.NET Core.

Resurser som saknas

Vanliga orsaker till att resurser inte hittas är:

  • Resursnamnen är felstavade i .NET XML-resursfilen (.resx) eller i lokaliseringsbegäran.
  • Resursen saknas i resursfilen för vissa språk, men finns i andra.
  • Om du fortfarande har problem kontrollerar du lokaliseringsloggmeddelandena (loggas på Debug loggnivå) för mer information om de resurser som saknas.

Tips/Råd

När du använder CookieRequestCultureProvider, kontrollera att enkelcitattecken inte används mellan kulturerna i lokaliseringsvärdet cookie. Till exempel c='en-UK'|uic='en-US' är ett ogiltigt cookie värde, medan c=en-UK|uic=en-US det är giltigt.

Problem med resurser och klassbibliotek

ASP.NET Core ger som standard ett sätt att låta klassbiblioteken hitta sina resursfiler via ResourceLocationAttribute.

Vanliga problem med klassbibliotek är:

CustomRequestCultureProvider fungerar inte som förväntat

Klassen RequestLocalizationOptions har tre standardprovidrar:

Med CustomRequestCultureProvider kan du anpassa hur lokaliseringskulturen tillhandahålls. CustomRequestCultureProvider Används när standardprovidrar inte uppfyller dina krav.

En vanlig orsak till att en anpassad leverantör inte fungerar korrekt är att den inte är den första leverantören i RequestCultureProviders listan. Så här löser du problemet:

  • Infoga den anpassade providern på position noll i RequestCultureProviders listan:

    options.AddInitialRequestCultureProvider(
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    
  • Infoga den anpassade providern på position noll i RequestCultureProviders listan:

    options.RequestCultureProviders.Insert(0, 
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    

Problem med rotnamnområde

När rotnamnområdet för en sammansättning skiljer sig från sammansättningsnamnet fungerar inte lokaliseringen som standard. Undvik det här problemet genom att RootNamespace använda attributet som beskrivs i Globalisering och lokalisering i ASP.NET Core.

Varning

Ett rotnamnområdesproblem kan uppstå när ett projekts namn inte är en giltig .NET-identifierare. Till exempel my-project-name.csproj använder rotnamnområdet my_project_name och sammansättningsnamnet my-project-name, vilket resulterar i det här felet.

Resurser och byggåtgärd

Om du använder resursfiler för lokalisering är det viktigt att de har en lämplig byggåtgärd. Använd inbäddad resurs; annars ResourceStringLocalizer kan inte hitta dessa resurser.

Åsidosättning av plats med hjälp av panelen "Sensorer" i utvecklarverktyg

När du använder platsåterställningen med hjälp av fönstret Sensorer i Google Chrome eller Microsoft Edge-utvecklarverktyg återställs återställningsspråket efter föråtergivningen. Undvik att ange språket med hjälp av fönstret Sensorer när du testar. Ange språket med webbläsarens språkinställningar.

För mer information, se Blazor Lokalisering fungerar inte med InteractiveServer (dotnet/aspnetcore #53707).

GitHub-problem med användbara problemlösningstips