1.4.0 öncesinde JekCMS dil motoru kurulum başladığında tüm çeviri dizelerini belleğe yüklüyordu. 12 dil içeren bir kurulumda bu işlem istek başına 18 MB bellek ve 200–400 ms ek yükleme süresi anlamına geliyordu.

Yeni motor talep bazlı çalışıyor: bir çeviri dizesi gerçekten kullanılana kadar belleğe alınmıyor. Aynı kurulumda bellek tüketimi 4 MB'ye, çeviri gecikmesi ise neredeyse sıfıra iniyor. %73 iyileşme rakamı, aktif tüm locale'lerde 4.800 çeviri dizesi barındıran bir üretim kurulumunda ölçüldü.

Sağdan Sola Yazı Desteği

RTL dil desteği hem yönetim panelinde hem de varsayılan tema katmanında kapsamlı değişiklikler gerektirdi. Metin yönü artık sayfa bazında değil locale bazında bir ayar; aktif dili değiştirmek ek yapılandırma gerekmeden site genelinde düzen yönünü de değiştiriyor. config/environment.php dosyasındaki RTL_LANGUAGES sabitine ISO 639-1 kodları dizisi olarak ekleme yapılıyor. Arapça (ar) ve İbranice (he) varsayılan olarak tanımlı geliyor; başka diller eklemek tek satır değişiklik gerektiriyor.

Arka Plan Medya Kuyruğu

Medya kitaplığı artık yüklemeleri eş zamanlı değil, arka plan kuyruğunda işliyor. Bu değişiklik özellikle büyük dosya yüklemelerinde hissedilir: kullanıcı yükleme ekranında beklemiyor, işlem arka planda tamamlanıyor.

Ayarlar › Medya bölümünden başlatılan toplu AVIF dönüşümü mevcut WebP dosyalarını 50'lik gruplar halinde dönüştürüyor; ilerleme durumu yoklama uç noktasıyla gerçek zamanlı olarak gösteriliyor. Orijinal WebP dosyaları dönüşüm doğrulanana kadar korunuyor, silme adımı ayrıca manuel olarak yapılıyor.

API v2 ve JWT Kimlik Doğrulaması

API kimlik doğrulaması uzun ömürlü API anahtarlarından kısa ömürlü JWT erişim tokenlarına (15 dakika geçerlilik) ve 30 günlük yenileme tokenlarına geçti. V1 API akışını kullanan mevcut entegrasyonlar v1.6.0'a kadar çalışmaya devam ediyor. Yeni entegrasyonlar için API değişiklik günlüğünde belgelenen v2 token uç noktası kullanılmalı; erişim tokenını istek döngüsü dışında saklamak yerine her seferinde yenileme tokeniyle yeni bir token çifti alınmalı.

Tembel Yükleme Motorunun Teknik Detayları

Eski motor her .json çeviri dosyasını uygulama başlatılırken belleğe yüklüyor, hepsini tek bir ilişkisel dizide saklıyordu. 12 aktif locale ve ortalama 400 anahtar ile bu, herhangi bir şablon oluşturulmadan önce 4.800 dizi girişi ve 18 MB bellek tüketimi demekti. Yeni motor bunu iki katmanlı bir yaklaşımla değiştiriyor.

Katman 1: Namespace Kaydı

Başlangıçta motor yalnızca config/translations/ dizinindeki dosya listesini okuyarak hafif bir namespace kaydı oluşturuyor — çeviri anahtar öneklerinden dosya yollarına düz bir eşleme. Bu, kurulu locale sayısından bağımsız olarak yaklaşık 12 KB bellek kullanıyor. Bir şablon __t('admin.sidebar.dashboard') çağırdığında motor admin namespace'ini buluyor, aktif locale için admin.json dosyasını talep anında yüklüyor ve ayrıştırılmış sonucu isteğin geri kalanı için önbelleğe alıyor.

Katman 2: OPcache Uyumlu Derlenmiş Dosyalar

Production ortamları için php tools/compile-translations.php komutu JSON dosyalarını düz PHP return [] dosyalarına dönüştürüyor. OPcache bunları paylaşımlı bellekte saklıyor ve JSON ayrıştırma yükünü tamamen ortadan kaldırıyor. Derlenmiş çıktı cache/translations/ dizininde saklanıyor ve kaynak JSON dosyasının değişiklik zamanı değiştiğinde otomatik olarak geçersiz kılınıyor.

// Eski yöntem (v1.3): tüm çeviriler başlangıçta yükleniyor
$tumCeviriler = [];
foreach (glob(TRANSLATIONS_PATH . '/*.json') as $dosya) {
 $tumCeviriler += json_decode(file_get_contents($dosya), true);
}

// Yeni yöntem (v1.4): namespace başına talep üzerine yükleme
function __t(string $anahtar): string {
 [$ns, $geri] = explode('.', $anahtar, 2);
 $locale = App::locale();
 if (!isset(TranslationStore::$loaded[$locale][$ns])) {
 TranslationStore::load($locale, $ns);
 }
 return TranslationStore::$loaded[$locale][$ns][$geri] ?? $anahtar;
}

RTL Uygulamasının Perde Arkası

Sağdan sola dil desteği sadece CSS direction değerini çevirmekle sınırlı kalmadı. Yönetim paneli, 142 düzen bildirimini geçersiz kılan ayrı bir admin-rtl.css stil dosyası kullanıyor: kenar boşlukları, dolgular, flexbox yönleri ve mutlak konumlandırma değerleri. Bu dosya yalnızca aktif yönetim locale'i RTL_LANGUAGES dizisinde olduğunda koşullu olarak yükleniyor ve LTR kurulumlar için sıfır performans maliyeti oluşturuyor.

Çift Yönlü Metin Kenar Durumları

Karma yönlü içerikler (ör. İngilizce marka adı içeren Arapça paragraflar) sayfa düzeyi yöne güvenmek yerine bireysel metin kapsayıcılarında dir="auto" özniteliği gerektiriyor. JekCMS'in varsayılan temaları bu özniteliği içerik alanı içindeki tüm <p>, <li> ve <h1>-<h6> öğelerine uyguluyor. Özel temalar da karma dilli gönderilerde ters noktalama işaretlerini önlemek için aynı yaklaşımı izlemeli.

Yönetim Paneli Yenilikleri

v1.4.0 yönetim paneli, önceki üst çubuk menüsünü değiştiren bir kenar çubuğu navigasyon yapısı sunuyor. Öne çıkan iyileştirmeler:

  • Küçük ekranlar için yalnızca simge moduna daraltılabilen kenar çubuğu — 240 piksel yatay alan tasarrufu
  • Bölüm bazlı renk kodlaması: içerik için mavi, medya için yeşil, ayarlar için turuncu, analitik için mor
  • En çok kullanılan 8 eylem için klavye kısayolları (Ctrl+N yeni gönderi, Ctrl+S kaydet vb.)
  • Bekleyen yorumları ve başarısız API isteklerini gösteren gerçek zamanlı bildirim rozeti
  • Oturumlar arasında veritabanı ayarı yerine çerez ile kalıcı olan karanlık mod geçişi

Yükseltme Yolu ve Uyumluluk

Önerilen yükseltme sırası: veritabanını yedekleyin, php tools/migrate-1.4.php --dry-run çalıştırın, günlüğü inceleyin, ardından bayrak olmadan tekrar çalıştırın. Özel tema kullanan siteler, dahili $translations dizisine doğrudan erişen kodu arayarak tembel yükleme değişikliğini test etmeli — bu global artık mevcut değil. Tüm yardımcı fonksiyonlar (__t(), __tc(), __tp()) aynı şekilde çalışıyor; yalnızca dahili yükleme mekanizması değişti.