Selamlar,
Şuan geliştirmeye devam ettiğim CMS üzerinde bahsettiğiniz yapıyı bende kurdum ve veritabanı ile çalıştım. Cache üzerinden performans kaybı yaşamadan hızlı işlem yapabildiğim için bu durum beni çok rahatsız etmedi. Ancak yine .net ile geliştirdiğimiz farklı bir projede bunu xml üzerinden yapmıştık. Xml'de mantık tr_TR.xml dosyasında
<lang>
<item id="changedlng">Dil Değiştirildi</item>
<item id="Language">Dil</item>
<item id="Languages">Diller</item>
<item id="Country">Ülke</item>
<item id="Countries">Ülkeler</item>
<item id="City">Şehir</item>
<item id="Cities">Şehirler</item> </lang>
şeklindeydi ve bunu T adında bir methodla örneğin T("changedLng") çağrıldığında bu node var ise değeri yok ise parametre olarak alınan "changedLng" id'sini döner. Localization kısmında ise tarayıcı header'ından gelen dil koduna göre örneğin en_GB adında xml dosyası var ise verileri ordan okur yok ise default atanan xml'den çalıştırır.
Php tarafında çok fazla tecrübem yok ancak benzeri bir yapı ile bahsettiğiniz olayı çözebilirsiniz. Bunun için xml yerine json veya herhangi bir şekilde formatına uygun .txt .lang vb kendinize özel bir dosya oluşturabilirsiniz. İçersinde ##{{}} benzeri özel yapılar oluşturarak aynı dosyada ki değerleri şablona uygun replace edebilirsiniz..
Aynen hocam mantık aynı.
________________
Arkadaşlar yukarıda bahsettiğim gibi
gettext i kurmak vesaite hem meşakatli hem de bir geliştiricinin istemeyeceği bir durum...
Bu nedenle bu sorunları aşmak adına (Aynı mantıkla çalışan)
Class yazdıklarından bahsetmiştim.
İçlerinden en beğendiğimi epey araştırdım.
".ini"
ve
".json"
üzerinde çalışabiliyor.
Ağaç mantığı ile değişkenler atamanıza olanak sağlıyor.
Otomatik dil algılaması yapabiliyor.
Manuel olarak
(?lang=en) gibi dil ayarlaması yapmanıza olanak veriyor.
Gene manuel olarak
SESSION üstünde bir
"lang" değeri kayıt etmişseniz onu da destekliyor.
Yukarıda yazdığım sıraya göre son yazılan bir öncekine baskın geliyor.
Bununla birlikte algıladığı diller arasında sizin dil dosyanız yok ise, otomatik destek sağlıyor (
Fallback ) mesela ingilizceyi ayarlarsan default olarak onu gösteriyor.
Ayrıca diyelim ki İnglizceyi geliştirmeye başladınız ama bazı değişkenler eksik. Böyle bir durumda eksik olan yeri default dilden çekme özelliği de var.
Belirli koşullarda (şartlar kullanarak) bir dil'i zorlayabiliyorsun. Mesela adam Türk ama Amerika da, ona illa ingilizce dil gösterebiliyorsun.
En güzeli de yeni diller ekleyebiliyor veya çıkarabiliyorsun.
Bir başka beğendiğim nokta ise (
CACHE) özelliği mevcut.
Yani bir kişi default olmayan bir dil seçtiğinde (HER SEFERİNDE FONKSİYON ÇALIŞIP .JSON çalışmıyor. Ön bellekten çekiyor. Eğer .json dosyası değişirse otomatik olarak cache'i yeniliyor.
Tabi eklemezsek ayıp olur, çalışma mantığı tıpkı gettext deki gibi.
PO MO yerine json kullanıyorsun veya .ini .yml gibi formatları destekliyor.
Ben çok beğendim.
İsterseniz bir inceleyin.
Konuyu açmaktaki amacıma da kısmen de olsa ulaştım. Biraz klasik metodlara benzeyen biraz da
gettext 'İ andıran, Yani Hybirt bir sistem kullanmış olacağım ki bu da benim için yeterli
Şimdi
SESSION 'u
COOKIE' e çevirmeyi deniyeceğim. Bir lang tercih kaydı için boştan yere sunucuyu yormaya gerek yok, browserde kalsın kişinin tercihi...
Bu arada bu saydıklarımı Wordpress'e entegre ettim az önce.
Bunun için wp nin (endpoint) özelliğini kullanıp
ornek.com/merhaba-dunya/en gibi bir url yapısı oluşturdum.
Fork ladığım projeyi paylaşayım isterseniz orijinaline ulaşırsınız. Çünkü eğer yapabilirsem COOKIE li versiyonunu da oraya yüklerim.
https://github.com/ionurboz/php-i18n
Bu da en.json dan basit bir örnek:
"site": {
"title": "Site Title"
},
"header": {
"navbar": {
"products": "Products",
"productsmarketplace": "Marketplace"
}
}
}Esenlikler.