Rozšiřitelnost lokalizace

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Podle Hisham Bin Ateya

Tento článek:

  • Vypíše body rozšiřitelnosti na lokalizačních rozhraních API.
  • Obsahuje pokyny k rozšíření lokalizace aplikace ASP.NET Core.

Rozšiřitelné body v lokalizačních rozhraních API

ASP.NET rozhraní API pro lokalizaci jádra jsou sestavená tak, aby byla rozšiřitelná. Rozšiřitelnost umožňuje vývojářům přizpůsobit lokalizaci podle svých potřeb. Například OrchardCore má .POStringLocalizer POStringLocalizer podrobně popisuje použití lokalizace Portable Object k použití PO souborů k ukládání lokalizačních prostředků.

Tento článek uvádí dva hlavní body rozšiřitelnosti, které poskytují lokalizační rozhraní API:

Poskytovatelé lokalizační jazykové verze

ASP.NET rozhraní API pro lokalizaci jádra mají čtyři výchozí zprostředkovatele, kteří můžou určit aktuální jazykovou verzi spuštěné žádosti:

Předchozí poskytovatelé jsou podrobně popsáni v dokumentaci k lokalizačnímu middlewaru. Pokud výchozí poskytovatelé nevyhovují vašim potřebám, vytvořte vlastního poskytovatele pomocí jednoho z následujících přístupů:

Použití CustomRequestCultureProvider

CustomRequestCultureProvider poskytuje vlastní, RequestCultureProvider který pomocí jednoduchého delegáta určí aktuální jazykovou verzi lokalizace:

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);
}));

Použití nové implementace RequestCultureProvider

Můžete vytvořit novou implementaci RequestCultureProvider , která určuje informace o jazykové verzi požadavku z vlastního zdroje. Vlastní zdroj může být například konfigurační soubor nebo databáze.

Následující příklad ukazuje AppSettingsRequestCultureProvider, který rozšiřuje RequestCultureProvider o určení informací o jazykové verzi požadavku z 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);
    }
}

Zdroje informací o lokalizaci

ASP.NET Core lokalizace poskytuje ResourceManagerStringLocalizer. ResourceManagerStringLocalizerje implementace, která se používá resx k ukládání lokalizačních IStringLocalizer prostředků.

Nejste omezeni na používání resx souborů. Implementací IStringLocalizerlze použít jakýkoli zdroj dat.

Následující ukázkové projekty implementují IStringLocalizer: