Yerelleştirme Genişletilebilirliği
Hisham BinÂya tarafından
Bu makalede:
- Yerelleştirme API'lerinde genişletilebilirlik noktalarını listeler.
- Uygulama yerelleştirmenin nasıl genişlet ASP.NET Core yönergeler sağlar.
Yerelleştirme API'lerinde Genişletilebilir Noktalar
ASP.NET Core yerelleştirme API'leri genişletilebilir olacak şekilde yerleşiktir. Genişletilebilirlik, geliştiricilerin yerelleştirmeyi ihtiyaçlarına göre özelleştirmesini sağlar. Örneğin,Core bir POStringLocalizer içerir. POStringLocalizer , yerelleştirme kaynaklarını depolamak üzere dosyaları kullanmak için Taşınabilir Nesne PO yerelleştirmeyi kullanmayı ayrıntılı olarak açıklar.
Bu makalede, yerelleştirme API'leri tarafından sağlanmıştır iki ana genişletilebilirlik noktası listelanmıştır:
Yerelleştirme Kültür Sağlayıcıları
ASP.NET Core yerelleştirme API'leri, yürütülen isteğin geçerli kültürünü belirleyecek 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 ihtiyaçlarınızı karşılayamasa, aşağıdaki yaklaşımlardan birini kullanarak özel bir sağlayıcı oluşturabilirsiniz:
CustomRequestCultureProvider kullanma
CustomRequestCultureProvider geçerli yerelleştirme RequestCultureProvider kültürünü belirlemek için basit bir temsilci kullanan bir özel 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 implemetation'ı kullanma
Özel bir kaynaktan RequestCultureProvider gelen istek kültürü bilgilerini belirleyen yeni bir uygulaması oluşturulabilir. Örneğin, özel kaynak bir yapılandırma dosyası veya veritabanı olabilir.
Aşağıdaki örnekte, 'den gelen istek kültürü bilgilerini belirlemek için 'i AppSettingsRequestCultureProvider RequestCultureProvider genişleten 'i appsettings.json gösterir:
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ştirme ResourceManagerStringLocalizer sağlar. ResourceManagerStringLocalizer , yerelleştirme IStringLocalizer kaynaklarını depolamak için kullanan bir resx uygulamasıdır.
Dosyaları kullanmakla sınırlı resx değildir. IStringLocalizeruygulanarak, herhangi bir veri kaynağı kullanılabilir.
Aşağıdaki örnek projeler IStringLocalizer uygulanır: