Yerelleştirme Genişletilebilirliği
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.
Tarafından Hisham Bin Ateya
Bu makalede:
- Yerelleştirme API'lerindeki genişletilebilirlik noktalarını listeler.
- ASP.NET Core uygulama yerelleştirmesini genişletme hakkında yönergeler sağlar.
Yerelleştirme API'lerinde Genişletilebilir Noktalar
ASP.NET Çekirdek yerelleştirme API'leri genişletilebilir olacak şekilde oluşturulur. Genişletilebilirlik, geliştiricilerin yerelleştirmeyi ihtiyaçlarına göre özelleştirmesine olanak tanır. Örneğin, OrchardCore'da bir POStringLocalizer
vardır. POStringLocalizer
, yerelleştirme kaynaklarını depolamak için dosyaları kullanmak üzere Taşınabilir Nesne yerelleştirmesini kullanmayı PO
ayrıntılı olarak açıklar.
Bu makalede, yerelleştirme API'lerinin sağladığı iki ana genişletilebilirlik noktası listelenir:
Yerelleştirme Kültürü Sağlayıcıları
ASP.NET Çekirdek yerelleştirme API'leri, yürütme isteğinin geçerli kültürünü belirleyebilen dört varsayılan sağlayıcıya sahiptir:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Yukarıdaki sağlayıcılar, Yerelleştirme Ara Yazılımı belgelerinde ayrıntılı olarak açıklanmıştır. Varsayılan sağlayıcılar gereksinimlerinizi karşılamıyorsa aşağıdaki yaklaşımlardan birini kullanarak özel bir sağlayıcı oluşturun:
CustomRequestCultureProvider kullanma
CustomRequestCultureProvider , geçerli yerelleştirme kültürünü belirlemek için basit bir temsilci kullanan bir özel RequestCultureProvider ayar sağlar:
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);
}));
RequestCultureProvider'ın yeni bir uygulamasını kullanma
Özel bir kaynaktan gelen istek kültürü bilgilerini belirleyen yeni bir uygulaması RequestCultureProvider oluşturulabilir. Örneğin, özel kaynak bir yapılandırma dosyası veya veritabanı olabilir.
Aşağıdaki örnekte, öğesinden appsettings.json
istek kültürü bilgilerini belirlemek için öğesini RequestCultureProvider genişleten gösterilirAppSettingsRequestCultureProvider
.
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);
}
}
Yerelleştirme kaynakları
ASP.NET Core yerelleştirmesi ResourceManagerStringLocalizersağlar. ResourceManagerStringLocalizer, yerelleştirme kaynaklarını depolamak için kullanılan resx
bir uygulamasıdırIStringLocalizer.
Dosyaları kullanmakla resx
sınırlı değilsiniz. uygulanarak IStringLocalizer
, herhangi bir veri kaynağı kullanılabilir.
Aşağıdaki örnek projeler şunu uygular IStringLocalizer:
ASP.NET Core