Condividi tramite


Risolvere i problemi di localizzazione di ASP.NET Core

Di Hisham Bin Ateya

Questo articolo fornisce istruzioni su come diagnosticare ASP.NET problemi di localizzazione delle app principali.

Problemi di configurazione della localizzazione

Ordine middleware di localizzazione
L'app potrebbe non localizzare 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 la registrazione una sola volta

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 delle risorse non trovate includono:

  • 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 culturali nel 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 relativi alle librerie di classi includono:

CustomRequestCultureProvider non funziona come previsto

La RequestLocalizationOptions classe ha tre provider predefiniti:

CustomRequestCultureProvider consente di personalizzare il modo in cui viene fornita la cultura di localizzazione. Il 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 il namespace radice di un assembly è diverso dal nome dell'assembly, la localizzazione non funziona per impostazione predefinita. Per evitare questo problema, usare l'attributoRootNamespace , descritto in Globalizzazione e localizzazione in ASP.NET Core.

Avvertimento

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 radice my_project_name e il nome dell'assembly my-project-name, che genera questo errore.

Risorse e operazione di compilazione

Se si usano i file di risorse per la localizzazione, è importante che abbiano un'azione di compilazione appropriata. Usa risorsa incorporata; in caso contrario, ResourceStringLocalizer non è in grado di 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