Freigeben über


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:

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: