Dil Sistemi ve Twig Entegrasyonu
Genel Bakış
MegaforBB dil sistemi, dosya tabanlı çevirileri lang/{locale}.php üzerinden okur ve veritabanı override'ları ile birleştirir. Uygulama genelinde çeviri çağrıları lang('key') helper'ı üzerinden yapılır. Twig tarafında aynı helper, TemplateEngine tarafından global fonksiyon olarak kayıtlıdır.
Çeviri helper'ı: helpers.php
Translator servisi: Translator.php
Twig fonksiyon kayıtları: TemplateEngine.php
Locale Çözümleme Sırası
Uygulama dili, merkezi olarak Application::resolveLocale() içinde belirlenir. Öncelik sırası aşağıdaki gibidir:
Session:
localekey'iCookie:
localekey'iAccept-Language: tarayıcı dili, dosya varsa
Config:
app.locale(varsayılantr)
Kaynak: Application.php
Çeviri Yükleme ve Override Mantığı
Translator::load() her locale için önce dosya çevirilerini okur, sonra DB çevirilerini ekler. array_merge kullanıldığı için DB kayıtları aynı anahtarda dosya değerini override eder.
Dosya:
lang/{locale}.phpDB tablo:
language_lines
Kaynaklar:
Translator::load
LanguageLine::getTranslationsForLocale
Fallback Locale
Translator, fallback dili Language::getDefault() üzerinden belirler; DB hazır değilse tr kullanır. Böylece anahtar bulunamazsa fallback locale denenir; yine yoksa anahtarın kendisi döner.
Kaynak: Application::translator, Translator::get
Anahtar Formatı (Flat Key)
Dil dosyaları flat key formatındadır; nested array yerine group.key şeklinde string anahtarlar kullanılır.
Örnekler:
'admin.languages.title' => 'Dil Yönetimi',
'common.login' => 'Giriş Yap',Kaynak: lang/tr.php
Placeholder Desteği
lang('key', ['name' => 'Ali']) çağrısında :name placeholder'ları string içinde replace edilir.
Kaynak: Translator::get
Twig Dosyalarında Kullanım
Twig içinde lang() fonksiyonu doğrudan kullanılabilir. TemplateEngine içinde TwigFunction olarak register edilir ve tüm template'lerde erişilebilir.
Örnek:
<h2 class="page-title">{{ lang('admin.languages.title')|e }}</h2>Kaynak:
TemplateEngine::registerFunctions
languages/index.html.twig
PHP Tarafında Kullanım
Controller veya servislerde doğrudan lang() helper'ı çağrılır. Helper, mevcut Application instance üzerinden translator()->get() çağırır.
Örnek:
return $this->view('languages/index', [
'pageTitle' => lang('admin.languages.title'),
]);Kaynak:
AdminLanguageController::index
helpers.php
Admin Panel Dil Yönetimi
Dil yönetimi ekranı, DB ve dosya tabanlı dilleri birleştirir; çeviri sayısı Translator::all() ile hesaplanır. Dil ekleme/düzenleme işlemleri DB tarafında language_lines tablosuna yazılır ve ardından lang/{code}.php dosyasına export edilir.
Öne çıkan akışlar:
Listeleme: DB + dosya taraması birleştirilir
Yeni dil: DB kaydı + opsiyonel çeviri kopyalama
Düzenleme: tüm anahtarlar (varsayılan + mevcut) bir arada gösterilir
Kaydetme: DB update + dosyaya export
Varsayılan dil:
languages.is_defaultgüncellenir
Kaynak: AdminLanguageController
Pratik Notlar
Dil dosyası yoksa locale,
resolveLocaleiçinde dosya kontrolü ile elenir.Twig cache çıktıları
storage/views/altında saklanır; dil değişiminde Twig çıktısı tekrar üretilebilir.lang()çağrısı her yerde güvenle kullanılabilir; anahtar bulunamazsa anahtarın kendisi döner.
Kaynaklar:
Application::resolveLocale
Translator::get
