Rozszerzalność lokalizacji
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Autor: Hisham Bin Ateya
W tym artykule:
- Wyświetla listę punktów rozszerzalności w interfejsach API lokalizacji.
- Zawiera instrukcje dotyczące rozszerzania lokalizacji aplikacji ASP.NET Core.
Rozszerzalne punkty w interfejsach API lokalizacji
ASP.NET Podstawowe interfejsy API lokalizacji są kompilowane w celu rozszerzenia. Rozszerzalność umożliwia deweloperom dostosowywanie lokalizacji zgodnie z ich potrzebami. Na przykład SadCore ma wartość POStringLocalizer
. POStringLocalizer
w tym artykule opisano szczegółowo używanie lokalizacji obiektu przenośnego do przechowywania zasobów lokalizacji za pomocą PO
plików.
W tym artykule wymieniono dwa główne punkty rozszerzalności, które zapewniają interfejsy API lokalizacji:
Dostawcy kultury lokalizacji
ASP.NET Podstawowe interfejsy API lokalizacji mają czterech domyślnych dostawców, którzy mogą określić bieżącą kulturę wykonywania żądania:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Poprzedni dostawcy szczegółowo opisano w dokumentacji oprogramowania pośredniczącego lokalizacji. Jeśli domyślni dostawcy nie spełniają Twoich potrzeb, utwórz dostawcę niestandardowego przy użyciu jednego z następujących metod:
Korzystanie z elementu CustomRequestCultureProvider
CustomRequestCultureProvider Udostępnia niestandardowy, RequestCultureProvider który używa prostego delegata do określania bieżącej kultury lokalizacji:
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);
}));
Używanie nowej implementacji elementu RequestCultureProvider
Można utworzyć nową implementację RequestCultureProvider , która określa informacje o kulturze żądania z niestandardowego źródła. Na przykład źródło niestandardowe może być plikiem konfiguracji lub bazą danych.
W poniższym przykładzie pokazano AppSettingsRequestCultureProvider
RequestCultureProvider element , który rozszerza element w celu określenia informacji o kulturze żądania z appsettings.json
elementu :
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);
}
}
Zasoby lokalizacji
lokalizacja ASP.NET Core zapewnia .ResourceManagerStringLocalizer ResourceManagerStringLocalizer to implementacja IStringLocalizer , która służy resx
do przechowywania zasobów lokalizacji.
Korzystanie z resx
plików nie jest ograniczone. IStringLocalizer
Implementując element , można użyć dowolnego źródła danych.
Następujące przykładowe projekty implementują:IStringLocalizer