Ana içeriğe geç

Globalization ve Localization

Globalization ve localization, uygulamanızın farklı diller ve kültürler için uygun hale getirilmesi sürecidir. Yanlış uygulamalar kullanıcı deneyimini olumsuz etkileyebilir veya yanlış dil/format gösterimine neden olabilir.


1. Sabit Kodlanmış (Hardcoded) Metinler Kullanmak

Yanlış Kullanım: Metinleri doğrudan sabit kodlamak.

public string GetWelcomeMessage()
{
    return "Welcome to our application!";
}

İdeal Kullanım: Kaynak dosyalarını kullanarak metinleri yerelleştirin.

Resources/Texts.resx:

<data name="WelcomeMessage" xml:space="preserve">
  <value>Welcome to our application!</value>
</data>

Kullanım:

public string GetWelcomeMessage()
{
    return Resources.Texts.WelcomeMessage;
}


2. Tarih ve Saat Formatlarını Sabit Kodlamak

Yanlış Kullanım: Tarih ve saat formatlarını manuel olarak ayarlamak.

var date = DateTime.Now.ToString("MM/dd/yyyy");

İdeal Kullanım: Kültür bilgilerini kullanarak tarih ve saat formatlarını otomatik hale getirin.

var date = DateTime.Now.ToString(CultureInfo.CurrentCulture);

3. Thread.CurrentThread.CurrentCulture‘ı Doğrudan Değiştirmek

Yanlış Kullanım: Thread.CurrentThread.CurrentCulture‘ı manuel olarak değiştirmek.

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

İdeal Kullanım: Middleware kullanarak kültür ayarlarını yönetin.

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("fr-FR") },
    SupportedUICultures = new[] { new CultureInfo("en-US"), new CultureInfo("fr-FR") }
});

4. Kullanıcı Tercihlerine Göre Dil Ayarı Yapmamak

Yanlış Kullanım: Varsayılan dil ayarını tüm kullanıcılara uygulamak.

var culture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;

İdeal Kullanım: Kullanıcının tercih ettiği dili dikkate alın.

app.Use(async (context, next) =>
{
    var userLanguage = context.Request.Headers["Accept-Language"].ToString();
    var culture = new CultureInfo(userLanguage);
    CultureInfo.CurrentCulture = culture;
    CultureInfo.CurrentUICulture = culture;

    await next();
});

5. Çevirilerin Test Edilmemesi

Yanlış Kullanım: Çevirilerin farklı dillerde nasıl görüneceğini test etmemek.

Test edilmeden yerelleştirme yapılır.

İdeal Kullanım: Farklı dillerde çevirileri test edin.

  • Çevirileri test etmek için Visual Studio’da “Set as Startup Culture” özelliğini kullanabilirsiniz.
  • Ayrıca CultureInfo‘yu manuel olarak değiştirebilirsiniz:
var culture = new CultureInfo("fr-FR");
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;

6. Veritabanında Sabit Kodlanmış Datalar Kullanmak

Yanlış Kullanım: Veritabanında sadece bir dilde içerik saklamak.

ProductName: "Laptop"

İdeal Kullanım: Veritabanında çoklu dil desteği sağlayın.

ProductName_en: "Laptop"
ProductName_fr: "Ordinateur portable"

7. Yerelleştirilmiş Kaynakların Performansını İzlememek

Yanlış Kullanım: Yerelleştirilmiş kaynakların yüklenme performansını göz ardı etmek.

İdeal Kullanım: Performans izleme araçları kullanarak kaynakların yüklenme hızını analiz edin.

  • Örnek: Application Insights, Prometheus
var startTime = Stopwatch.StartNew();
var message = Resources.Texts.WelcomeMessage;
startTime.Stop();
logger.LogInformation("Yerelleştirilmiş kaynak {TimeTaken} ms'de yüklendi.", startTime.ElapsedMilliseconds);