Condividi tramite


Risolvere i problemi di localizzazione di ASP.NET Core

Di Hisham Bin Ateya

Questo articolo include istruzioni per la diagnostica di problemi di localizzazione delle app ASP.NET Core.

Problemi di configurazione della localizzazione

Ordine del middleware di localizzazione
L'app potrebbe non essere localizzata perché il middleware di localizzazione non è ordinato come previsto.

Per risolvere questo problema assicurarsi che il middleware di localizzazione sia registrato prima del middleware MVC. In caso contrario il middleware di localizzazione non viene applicato.

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

    services.AddMvc();
}

Percorso delle risorse di localizzazione non trovato

Le impostazioni cultura supportate in RequestCultureProvider non corrispondono con quelle registrate

Problemi di denominazione dei file di risorse

ASP.NET Core include regole e linee guida predefinite per la denominazione dei file delle risorse di localizzazione, descritte in Globalizzazione e localizzazione in ASP.NET Core.

Risorse mancanti

Le cause comuni per le quali non è possibile trovare le risorse sono:

  • I nomi delle risorse vengono digitati in modo non corretto nel file di risorse XML .NET (.resx) o nella richiesta del localizzatore.
  • La risorsa non è presente nel file di risorse per alcune lingue, ma esiste in altre lingue.
  • Se si verificano ancora problemi, controllare i messaggi del log di localizzazione (registrati a Debug livello di log) per altri dettagli sulle risorse mancanti.

Suggerimento

Quando si usa CookieRequestCultureProvider, verificare che le virgolette singole non siano usate con le impostazioni cultura all'interno del valore di localizzazione cookie . Ad esempio, c='en-UK'|uic='en-US' è un valore non valido cookie , mentre c=en-UK|uic=en-US è valido.

Problemi relativi alle risorse e alle librerie di classi

ASP.NET Core per impostazione predefinita consente alle librerie di classi di trovare i file di risorse tramite ResourceLocationAttribute.

I problemi comuni con le librerie di classi includono:

CustomRequestCultureProvider non funziona come previsto

La classe RequestLocalizationOptions dispone di tre provider predefiniti:

CustomRequestCultureProvider consente di personalizzare il modo in cui vengono fornite le impostazioni cultura di localizzazione. CustomRequestCultureProvider viene usato quando i provider predefiniti non soddisfano i requisiti.

Un motivo comune per cui un provider personalizzato non funziona correttamente è che non è il primo provider nell'elenco RequestCultureProviders . Per risolvere il problema:

  • Inserire il provider personalizzato in corrispondenza della posizione zero nell'elenco RequestCultureProviders :

    options.AddInitialRequestCultureProvider(
        new CustomRequestCultureProvider(async context =>
        {
            // My custom request culture logic
            return new ProviderCultureResult("en");
        }));
    
  • Inserire il provider personalizzato in corrispondenza della posizione zero nell'elenco RequestCultureProviders :

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

Problemi dello spazio dei nomi radice

Quando lo spazio dei nomi radice di un assembly è diverso dal nome dell'assembly, la localizzazione non funziona per impostazione predefinita. Per evitare questo problema, usare l'attributo , descritto in Globalizzazione e localizzazione in ASP.NET Core.RootNamespace

Avviso

Un problema dello spazio dei nomi radice può verificarsi quando il nome di un progetto non è un identificatore .NET valido. Ad esempio, my-project-name.csproj usa lo spazio dei nomi my_project_name radice e il nome my-project-namedell'assembly , che genera questo errore.

Risorse e azione di compilazione

Se si usano file di risorse per la localizzazione, è importante che questi dispongano di un'azione di compilazione appropriata. Usare la risorsa incorporata. In caso contrario, ResourceStringLocalizer non è possibile trovare queste risorse.

Override della posizione usando il riquadro "Sensori" negli strumenti di sviluppo

Quando si usa l'override della posizione usando il riquadro Sensori in Google Chrome o negli strumenti di sviluppo di Microsoft Edge, il linguaggio di fallback viene reimpostato dopo la prerisorsa. Evitare di impostare la lingua usando il riquadro Sensori durante il test. Impostare la lingua usando le impostazioni della lingua del browser.

Per altre informazioni, vedere Blazor Localizzazione non funziona con InteractiveServer (dotnet/aspnetcore #53707)..

Problemi di GitHub con suggerimenti utili per la risoluzione dei problemi