FmgLib.MauiMarkup, JSON dosyalarıyla beslenen hafif bir yerelleştirme sistemi içerir — canlı dil değiştirme ile: dil değiştiğinde bağlı metinler anında güncellenir, sayfa yeniden yüklenmez.
Önerilen kullanım options overload'ı — dosya adını kültür adıyla karıştıramaz ve yedek kültür, eksik anahtar politikası ile kültür senkronizasyonu burada ayarlanır:
C#
builder.UseMauiMarkupLocalization(o => o
.UseFiles("Common.json", "Checkout.json") // sırayla birleşir; çakışan anahtarda sonraki kazanır
.UseDefaultCulture("tr-TR") // başlangıç dili
.UseFallbackCulture("en-US")); // geçerli kültürden sonuç çıkmazsa kullanılır
Kısa biçimler:
C#
// varsayılan: uygulama paketinde "Localization.json" arar
.UseMauiMarkupLocalization()
// başlangıç dilini ayarla
.UseMauiMarkupLocalization(defaultLang: "tr-TR")
// başlangıç dili + özel dosyalar
.UseMauiMarkupLocalization(defaultLang: "tr-TR", "Loc1.json", "Loc2.json")
// sadece dosyalar — argüman MUTLAKA isimlendirilmeli, çünkü ilk konumsal parametre kültürdür
.UseMauiMarkupLocalization(filePaths: new[] { "Localization1.json", "/Languages/Temp1.json" })
İlk argümana dikkat.UseMauiMarkupLocalization(defaultLang, params filePaths) imzasında kültür başta olduğu için UseMauiMarkupLocalization("Common.json", "Checkout.json") çağrısı bir dosya adını kültür olarak geçer. Bu artık başlangıçta, çözümü söyleyen bir mesajla reddediliyor — ya filePaths: kullanın ya da options overload'ını.
Yükleme senkrondur ve hata fırlatır: eksik veya bozuk bir dil dosyası, her etiketin ham anahtarını göstermesi yerine uygulamayı başlangıçta düşürür.
Çevrilen bir cümle genelde çalışma zamanı değeri taşır. TranslateFormat hem çeviriyi hem argümanları bağlar; böylece etiket dil değişince de argüman değişince de yeniden çizilir:
Argüman yolları elemanın BindingContext'ine göre çözülür. Yer tutucular seçili kültürle biçimlenir; yani {1:C}tr-TR'de 1.234,50 ₺, en-US'te $1,234.50 verir. Bir çeviride {0} kaybolursa etiket hata fırlatmak yerine ham kalıbı gösterir.
UI olmayan string'ler (uyarı, log) için translator'ı doğrudan indeksleyin — veya ToTranslate string genişletmesini kullanın:
C#
string title = Translator.Instance["Hello"];
awaitDisplayAlert(Translator.Instance["Hello"], Translator.Instance["Msg"], "OK");
// string genişletme karşılıkları:string hello = "Hello".ToTranslate(); // geçerli kültürstring helloTr = "Hello".ToTranslate("tr-TR"); // açık kültür
Bunlar anlık görüntü döner.new Label().Text("Hello".ToTranslate()) derlenir ve doğru metni gösterir ama dil değişince güncellenmez — arkasında binding yoktur. Ekrandaki her şey için .Text(e => e.Translate("Hello")) kullanın.
Özelliğe göre bölün:UseMauiMarkupLocalization(o => o.UseFiles("Common.json", "Checkout.json", "Settings.json")). Dosyalar tek sözlükte birleşir; çakışan anahtarda sonraki dosyalar öncekileri geçersiz kılar — dil bazında, yani bir feature dosyası bir anahtarın tek dilini diğerlerini tekrarlamadan ezebilir.
Eksik anahtarlar: anlamlı anahtar adları tercih edin ("Login_InvalidPassword"), Debug derlemelerinde MissingTranslationBehavior.Marker düşünün.
Kültür yedeklemesi: arama tr-TR → tr → ayarlı FallbackCulture sırasıyla ilerler. Ortak anahtarları nötr dile ("tr", "en") yazmak tüm bölgesel varyantları tek seferde kapsar.
Dil dosyası eksik veya hatalıysa başlangıçta beklenen formatı açıklayan bir FileLoadException fırlatılır — dosyaları CI'ın parçası olarak doğrulayın.