Ekstensibilitas Pelokalan
Oleh Hisham Bin Ateya
Artikel ini:
- Mencantumkan titik ekstensibilitas pada API pelokalan.
- Memberikan instruksi tentang cara memperluas pelokalan aplikasi ASP.NET Core.
Titik yang Dapat Diperluas dalam API Pelokalan
ASP.NET API pelokalan Inti dibangun agar dapat diperluas. Ekstensibilitas memungkinkan pengembang untuk menyesuaikan pelokalan sesuai dengan kebutuhan mereka. Misalnya, OrchardCore memiliki POStringLocalizer
. POStringLocalizer
menjelaskan secara rinci menggunakan pelokalan Objek Portabel untuk menggunakan PO
file untuk menyimpan sumber daya pelokalan.
Artikel ini mencantumkan dua titik ekstensibilitas utama yang disediakan API pelokalan:
Penyedia Budaya Lokalisasi
ASP.NET API pelokalan Core memiliki empat penyedia default yang dapat menentukan budaya permintaan yang dijalankan saat ini:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
- CustomRequestCultureProvider
Penyedia sebelumnya dijelaskan secara rinci dalam dokumentasi Middleware Pelokalan. Jika penyedia default tidak memenuhi kebutuhan Anda, buat penyedia kustom menggunakan salah satu pendekatan berikut:
Menggunakan CustomRequestCultureProvider
CustomRequestCultureProvider menyediakan kustom RequestCultureProvider yang menggunakan delegasi sederhana untuk menentukan budaya pelokalan saat ini:
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);
}));
Menggunakan implementasi baru RequestCultureProvider
Implementasi RequestCultureProvider baru dapat dibuat yang menentukan informasi budaya permintaan dari sumber kustom. Misalnya, sumber kustom dapat menjadi file konfigurasi atau database.
Contoh berikut menunjukkan AppSettingsRequestCultureProvider
, yang memperluas RequestCultureProvider untuk menentukan informasi budaya permintaan dari 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);
}
}
Sumber daya pelokalan
ASP.NET Core menyediakan ResourceManagerStringLocalizer. ResourceManagerStringLocalizer adalah implementasi dari IStringLocalizer yang menggunakan resx
untuk menyimpan sumber daya pelokalan.
Anda tidak terbatas pada penggunaan resx
file. Dengan menerapkan IStringLocalizer
, sumber data apa pun dapat digunakan.
Contoh proyek berikut mengimplementasikan IStringLocalizer:
ASP.NET Core
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk