Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 10-versie van dit artikel voor de huidige release.
Door Hisham Bin Ateya
Dit artikel:
- Geeft een lijst van de uitbreidbaarheidspunten op de lokalisatie-API's.
- Bevat instructies voor het uitbreiden van ASP.NET Core-app-lokalisatie.
Uitbreidbare punten in lokalisatie-API's
ASP.NET Core lokalisatie-API's zijn gebouwd om uitbreidbaar te zijn. Met uitbreidbaarheid kunnen ontwikkelaars de lokalisatie aanpassen aan hun behoeften.
OrchardCore heeft bijvoorbeeld een POStringLocalizer.
POStringLocalizer beschrijft gedetailleerd hoe de Portable Object localization kan worden gebruikt om PO bestanden te gebruiken voor het opslaan van lokalisatiebronnen.
In dit artikel worden de twee belangrijkste uitbreidbaarheidspunten vermeld die lokalisatie-API's bieden:
Providers van Lokalisatieculturen
ASP.NET Core lokalisatie-API's hebben vier standaardproviders die de huidige cultuur van een uitvoerde aanvraag kunnen bepalen:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
De voorgaande providers worden uitgebreid beschreven in de documentatie over Localization Middleware . Als de standaardproviders niet aan uw behoeften voldoen, maakt u een aangepaste provider met behulp van een van de volgende methoden:
CustomRequestCultureProvider gebruiken
CustomRequestCultureProvider biedt een aangepaste RequestCultureProvider die gebruikmaakt van een eenvoudige gemachtigde om de huidige lokalisatiecultuur te bepalen:
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);
}));
Een nieuwe implementatie van RequestCultureProvider gebruiken
Er kan een nieuwe implementatie van RequestCultureProvider worden gemaakt die de requestcultuurinformatie uit een aangepaste bron bepaalt. De aangepaste bron kan bijvoorbeeld een configuratiebestand of database zijn.
Het volgende voorbeeld toont AppSettingsRequestCultureProvider, die de RequestCultureProvider uitbreidt om de cultuurinformatie van de aanvraag te bepalen uit 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);
}
}
Lokalisatiebronnen
ASP.NET Core lokalisatie biedt ResourceManagerStringLocalizer.
ResourceManagerStringLocalizer is een implementatie van IStringLocalizer die resx gebruikt voor het opslaan van lokalisatiebronnen.
U bent niet beperkt tot het gebruik van resx bestanden. Door te implementeren IStringLocalizer, kan elke gegevensbron worden gebruikt.
De volgende voorbeeldprojecten implementeren IStringLocalizer: