Risolvere i problemi di localizzazione di ASP.NET Core
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:
- L'elemento mancante ResourceLocationAttribute in una libreria di classi impedisce ResourceManagerStringLocalizerFactory l'individuazione delle risorse.
- Denominazione dei file di risorse. Per altre informazioni, vedere la sezione Problemi di denominazione dei file di risorse.
- Modifica dello spazio dei nomi radice della libreria di classi. Per altre informazioni, vedere la sezione Problemi dello spazio dei nomi radice.
CustomRequestCultureProvider
non funziona come previsto
La classe RequestLocalizationOptions dispone di tre provider predefiniti:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
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"); }));
- Usare il AddInitialRequestCultureProvider metodo di estensione per impostare il provider personalizzato come provider iniziale.
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-name
dell'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)..