LokalisierungserweiterbarkeitLocalization Extensibility

Von Hisham Bin AteyaBy Hisham Bin Ateya

Dieser Artikel:This article:

  • Listet die Erweiterbarkeitspunkte für die Lokalisierungs-APIs auf.Lists the extensibility points on the localization APIs.
  • Enthält Anweisungen zum Erweitern der ASP.NET Core-App-Lokalisierung.Provides instructions on how to extend ASP.NET Core app localization.

Erweiterbare Punkte in Lokalisierungs-APIsExtensible Points in Localization APIs

ASP.NET Core-Lokalisierungs-APIs sind für Erweiterbarkeit konzipiert.ASP.NET Core localization APIs are built to be extensible. Erweiterbarkeit ermöglicht es Entwicklern, die Lokalisierung entsprechend ihren Anforderungen anzupassen.Extensibility allows developers to customize the localization according to their needs. Beispielsweise verfügt OrchardCore über einen POStringLocalizer.For instance, OrchardCore has a POStringLocalizer. POStringLocalizer beschreibt ausführlich die Verwendung der Lokalisierung portabler Objekte, um PO-Dateien zum Speichern von Lokalisierungsressourcen zu verwenden.POStringLocalizer describes in detail using Portable Object localization to use PO files to store localization resources.

In diesem Artikel werden die beiden wichtigsten Erweiterbarkeitspunkte aufgelistet, die von Lokalisierungs-APIs bereitgestellt werden:This article lists the two main extensibility points that localization APIs provide:

LokalisierungskulturanbieterLocalization Culture Providers

ASP.NET Core-Lokalisierungs-APIs verfügen über vier Standardanbieter, die die aktuelle Kultur einer aktuell ausgeführten Anforderung bestimmen können:ASP.NET Core localization APIs have four default providers that can determine the current culture of an executing request:

Die oben genannten Anbieter werden ausführlich in der Dokumentation zur Lokalisierungsmiddleware beschrieben.The preceding providers are described in detail in the Localization Middleware documentation. Wenn die Standardanbieter Ihre Anforderungen nicht erfüllen, erstellen Sie einen benutzerdefinierten Anbieter, indem Sie einen der folgenden Ansätze verwenden:If the default providers don't meet your needs, build a custom provider using one of the following approaches:

Verwenden von CustomRequestCultureProviderUse CustomRequestCultureProvider

CustomRequestCultureProvider stellt einen benutzerdefinierten RequestCultureProvider bereit, der einen einfachen Delegaten verwendet, um die aktuelle Lokalisierungskultur zu ermitteln:CustomRequestCultureProvider provides a custom RequestCultureProvider that uses a simple delegate to determine the current localization culture:

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(culture);

    return Task.FromResult(requestCulture);
}));
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(culture);

    return Task.FromResult(requestCulture);
}));

Verwenden einer neuen Implementierung von RequestCultureProviderUse a new implemetation of RequestCultureProvider

Eine neue Implementierung von RequestCultureProvider kann erstellt werden, die die Informationen zur Anforderungskultur aus einer benutzerdefinierten Quelle bestimmt.A new implementation of RequestCultureProvider can be created that determines the request culture information from a custom source. Beispielsweise kann es sich bei der benutzerdefinierten Quelle um eine Konfigurationsdatei oder Datenbank handeln.For example, the custom source can be a configuration file or database.

Das folgende Beispiel zeigt AppSettingsRequestCultureProvider, der den RequestCultureProvider erweitert, um die Anforderungskulturinformationen aus appsettings.json zu ermitteln:The following example shows AppSettingsRequestCultureProvider, which extends the RequestCultureProvider to determine the request culture information from 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);
    }
}

LokalisierungsressourcenLocalization resources

Die ASP.NET Core-Lokalisierung stellt ResourceManagerStringLocalizer bereit.ASP.NET Core localization provides ResourceManagerStringLocalizer. ResourceManagerStringLocalizer ist eine Implementierung von IStringLocalizer, die resx verwendet, um Lokalisierungsressourcen zu speichern.ResourceManagerStringLocalizer is an implementation of IStringLocalizer that is uses resx to store localization resources.

Sie sind nicht auf die Verwendung von resx-Dateien beschränkt.You aren't limited to using resx files. Durch Implementieren von IStringLocalized kann jede beliebige Datenquelle verwendet werden.By implementing IStringLocalized, any data source can be used.

Die folgenden Beispielprojekte implementieren IStringLocalizer:The following example projects implement IStringLocalizer: