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:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
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í IStringLocalizer
lze použít jakýkoli zdroj dat.
Následující ukázkové projekty implementují IStringLocalizer: