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 predefinite e linee guida per la denominazione dei file di risorse di localizzazione, descritte in dettaglio qui.
Risorse mancanti
Le cause comuni per le quali non è possibile trovare le risorse sono:
- I nomi delle risorse presentano errori di ortografia nel file
resx
o nella richiesta del localizzatore. - La risorsa non è presente in
resx
per alcune lingue, ma è presente per altre. - Se si verificano ancora problemi, controllare i messaggi del log di localizzazione (al livello di log
Debug
) per altre informazioni sulle risorse mancanti.
Hint: quando si usa CookieRequestCultureProvider
, verificare che le virgolette singole non vengano 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 con le risorse e le 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'assenza di
ResourceLocationAttribute
in una libreria di classi impedisce aResourceManagerStringLocalizerFactory
di trovare le 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 con lo 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 le impostazioni cultura di localizzazione vengono fornite nell'app. CustomRequestCultureProvider
viene usato quando i provider predefiniti non soddisfano i requisiti.
Un motivo comune per cui i il provider personalizzato non funziona correttamente è che non è il primo provider nell'elenco
RequestCultureProviders
. Per risolvere il problema:Inserire il provider personalizzato nella posizione 0 dell'elenco
RequestCultureProviders
come illustrato di seguito:
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return new ProviderCultureResult("en");
}));
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return new ProviderCultureResult("en");
}));
- Usare il metodo di estensione
AddInitialRequestCultureProvider
per impostare il provider personalizzato come provider iniziale.
Problemi con lo 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 RootNamespace, descritto in dettaglio qui.
Avviso
Ciò può verificarsi quando il nome di un progetto non è un identificatore .NET valido. Ad esempio my-project-name.csproj
, userà 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. Vanno impostati come Risorsa incorporata; in caso contrario ResourceStringLocalizer
non è in grado di trovare tali risorse.
Problemi di GitHub con suggerimenti utili per la risoluzione dei problemi
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per