Lokalisierungserweiterbarkeit
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Von Hisham Bin Ateya
Dieser Artikel:
- Listet die Erweiterbarkeitspunkte für die Lokalisierungs-APIs auf.
- Enthält Anweisungen zum Erweitern der ASP.NET Core-App-Lokalisierung.
Erweiterbare Punkte in Lokalisierungs-APIs
ASP.NET Core-Lokalisierungs-APIs sind für Erweiterbarkeit konzipiert. Erweiterbarkeit ermöglicht es Entwicklern, die Lokalisierung entsprechend ihren Anforderungen anzupassen. Beispielsweise verfügt OrchardCore über einen POStringLocalizer
. POStringLocalizer
beschreibt ausführlich die Verwendung der Lokalisierung portabler Objekte, um PO
-Dateien zum Speichern von Lokalisierungsressourcen zu verwenden.
In diesem Artikel werden die beiden wichtigsten Erweiterbarkeitspunkte aufgelistet, die von Lokalisierungs-APIs bereitgestellt werden:
Lokalisierungskulturanbieter
ASP.NET Core-Lokalisierungs-APIs verfügen über vier Standardanbieter, die die aktuelle Kultur einer aktuell ausgeführten Anforderung bestimmen können:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Die oben genannten Anbieter werden ausführlich in der Dokumentation zur Lokalisierungsmiddleware beschrieben. Wenn die Standardanbieter Ihre Anforderungen nicht erfüllen, erstellen Sie einen benutzerdefinierten Anbieter, indem Sie einen der folgenden Ansätze verwenden:
Verwenden von CustomRequestCultureProvider
CustomRequestCultureProvider stellt einen benutzerdefinierten RequestCultureProvider bereit, der einen einfachen Delegaten verwendet, um die aktuelle Lokalisierungskultur zu ermitteln:
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);
}));
Verwenden einer neuen Implementierung von RequestCultureProvider
Eine neue Implementierung von RequestCultureProvider kann erstellt werden, die die Informationen zur Anforderungskultur aus einer benutzerdefinierten Quelle bestimmt. Beispielsweise kann es sich bei der benutzerdefinierten Quelle um eine Konfigurationsdatei oder Datenbank handeln.
Das folgende Beispiel zeigt AppSettingsRequestCultureProvider
, wodurch RequestCultureProvider erweitert wird, um die Anforderungskulturinformationen aus appsettings.json
zu ermitteln:
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);
}
}
Lokalisierungsressourcen
Die ASP.NET Core-Lokalisierung stellt ResourceManagerStringLocalizer bereit. ResourceManagerStringLocalizer ist eine Implementierung von IStringLocalizer, die resx
verwendet, um Lokalisierungsressourcen zu speichern.
Sie sind nicht auf die Verwendung von resx
-Dateien beschränkt. Durch Implementieren von IStringLocalizer
kann jede beliebige Datenquelle verwendet werden.
Die folgenden Beispielprojekte implementieren IStringLocalizer: