Estendibilità della localizzazione
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Questo articolo:
- Elenca i punti di estendibilità nelle API di localizzazione.
- Include le istruzioni per estendere la localizzazione delle app ASP.NET Core.
Punti estendibili nelle API di localizzazione
Le API di localizzazione di ASP.NET Core sono estendibili. L'estendibilità consente agli sviluppatori di personalizzare la localizzazione in base alle esigenze. OrchardCore, ad esempio, ha POStringLocalizer
. POStringLocalizer
descrive in dettaglio l'uso della localizzazione degli oggetti portabili per usare file PO
per archiviare le risorse di localizzazione.
Questo articolo elenca i due punti di estendibilità principali forniti dalle API di localizzazione:
Provider di impostazioni cultura per la localizzazione
Le API di localizzazione di ASP.NET Core hanno quattro provider predefiniti che possono determinare le impostazioni cultura correnti di una richiesta in esecuzione:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
I provider precedenti sono descritti in dettaglio nella documentazione del middleware di localizzazione. Se i provider predefiniti non rispondono alle proprie esigenze, compilare un provider personalizzato usando uno degli approcci seguenti:
Usare CustomRequestCultureProvider
CustomRequestCultureProvider fornisce una classe RequestCultureProvider personalizzata che usa un semplice delegato per determinare le impostazioni cultura correnti per la localizzazione:
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
{
var currentCulture = "en";
var segments = context.Request.Path.Value.Split(new char[] { '/' },
StringSplitOptions.RemoveEmptyEntries);
if (segments.Length > 1 && segments[0].Length == 2)
{
currentCulture = segments[0];
}
var requestCulture = new ProviderCultureResult(currentCulture);
return Task.FromResult(requestCulture);
}));
Usare una nuova implementazione di RequestCultureProvider
Si può creare una nuova implementazione di RequestCultureProvider che determina le informazioni sulle impostazioni cultura della richiesta da un'origine personalizzata. L'origine personalizzata, ad esempio, può essere un file o un database di configurazione.
Nell'esempio seguente viene illustrato AppSettingsRequestCultureProvider
, che estende per RequestCultureProvider determinare le informazioni sulle impostazioni cultura della richiesta da appsettings.json
:
public class AppSettingsRequestCultureProvider : RequestCultureProvider
{
public string CultureKey { get; set; } = "culture";
public string UICultureKey { get; set; } = "ui-culture";
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException();
}
var configuration = httpContext.RequestServices.GetService<IConfigurationRoot>();
var culture = configuration[CultureKey];
var uiCulture = configuration[UICultureKey];
if (culture == null && uiCulture == null)
{
return Task.FromResult((ProviderCultureResult)null);
}
if (culture != null && uiCulture == null)
{
uiCulture = culture;
}
if (culture == null && uiCulture != null)
{
culture = uiCulture;
}
var providerResultCulture = new ProviderCultureResult(culture, uiCulture);
return Task.FromResult(providerResultCulture);
}
}
Risorse di localizzazione
La localizzazione di ASP.NET Core fornisce ResourceManagerStringLocalizer. ResourceManagerStringLocalizerè un'implementazione di che usa resx
per archiviare le risorse di IStringLocalizer localizzazione.
Non è obbligatorio usare file resx
. Implementando IStringLocalizer
, si può usare qualsiasi origine dati.
I progetti di esempio seguenti implementano IStringLocalizer: