Dil Sistemi ve Twig Entegrasyonu
2026-02-26 20:48:33
#1

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:

  1. Session: locale key'i

  2. Cookie: locale key'i

  3. Accept-Language: tarayıcı dili, dosya varsa

  4. Config: app.locale (varsayılan tr)

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}.php

  • DB 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_default güncellenir

Kaynak: AdminLanguageController

Pratik Notlar

  • Dil dosyası yoksa locale, resolveLocale iç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

Yazdığımız şeyler bizi temsil eder, Efendilik iyidir.
Please Login or Register.