Php çoklu dil ile ilgili beyin fırtınası
Selam arkadaşlar bir CRM yazıyorum ve bu sisteme çoklu dil eklemek istiyorum
Anca CRMde fazlasıyla statik yazı olduğu için diziler ile çoklu dil bir yere kadar gidiyor.
Json ile yapsam eklenen her özellik yeni statik yazı anlamına geliyor belli bir süre sonra dosya boyutu büyüdükçe büyür
MYSQL ile düşündüm ancak her sayfada sorgu göndermek performansı etkiler.
CRM yazılımını anlık 100 kişi kullanıyor.
Sizce en mantıklı yol hangisidir. Gettext diye düşündüm ondada dosya mevzusu var. Wordpressi inceledim hep po dosyaları var hem json dosyaları (büyük ihtimal cache dosyaları)
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
lang/tr.php
lang/en.php
olarak tutup geriye array dönersin.
// lang/en.php
return [
'Merhaba Dünya' => 'Hello World',
'Toplam %s İçerik Bulundu' => '%s Content Found'
];
Kullanırkende aslında bir fonksiyondan geçireceksin. Öncelikle mevcut dilin dosyasını yükletmen lazım.
// config.php gibi bir dosyan olduğunu varsayalım
$langKy = $_SESSION['lang'] ?? 'en'; // sessionda dil tanımsız ise varsayılan 'en' olarak ayarladım ben
$lang = file_get_contents(__DIR__ . '/lang/' . $langKey . '.php');
şimdi bir fonksiyon yazalım örneğin adı __()
olabilir. Ve global olarak içine $lang
değerini alıp gelen text varsa translate halini yoksa textin kendisini döndürelim.
function __($key) {
global $lang;
return $lang[$key] ?? $key;
}
artık kullanırkende şöyle kullanacağız.
// view örneği
<p>
<?=__('Merhaba Dünya')?>
</p>
<p>
<?=sprintf(__('Toplam %s İçerik Bulundu'), 3)?>
</p>
artık dilin ingilizce ise bu arkadaşları ingilizce görmen gerek. Dosyanın boyutu gözünü korkutmasın yormaz seni o kadar.
Merhaba @rephp7,
Database için aynı tablodan diller için farklı sütunlarda veri tutuyorsan aşağıdaki gibi bir fonksiyon işine yarayabilir.
function changeLanguage($turkishVersion, $englishVersion)
{
if (($_SESSION['lang'] == 'en') && ($englishVersion != '') && ($englishVersion != NULL)) {
return $englishVersion;
}
return $turkishVersion;
}
Bu fonksiyonu dili değişmesini istediğin her türlü yerde kullanabilirsin.
Örnek:
//Db'de ingilizce ve türkçe için ayrı versiyon varsa;
echo changelanguage($veri[$i]["tr_baslik"],$veri[$i]["en_baslik"]);
//Bir metni değişmesini istiyorsan
echo changelanguage('Merhaba Dünya','Hello World');
//Decode edilen veriler için
echo htmlspecialchars_decode(changeLanguage($veri[$i]["tr_icerik"], $veri[$i]["en_icerik"]))
//Html çevirme
echo changeLanguage('<a href="">Buraya</a> tıklayarak ulaşabilirsin', 'You can access it by <a href="">clicking here</a>')
Fonksiyon sana bir örnek olsun kendi sistemine ve ihtiyacına göre bu şekilde fonksiyon yazarak sistemini güncelleyebilirsin.
tayfunerbilen'in bu konu başlığında çözüm olan cevabına istinaden;
@tayfunerbilen hocam ve bilgisi olan prototurk üyelerine sormak isterim. bilgisi olan cevaplarsa sevinirim.
tablomda en_baslik ve tr_baslik diye iki sütunum var.
veri çağırdığım fonksiyonda bu;
<?=$veri[$i]["tr_baslik"];?>
şimdi return ile ingilizce sayfa tercihinde değişimi sağlar mı?
return [
'tr_baslik'=>'en_baslik'
];
çalışır mı? kullanımı nasıl olur bunun?
cachelemekten kastınız cookieler oluşturmak mı? bu mantıksız geldi bana öyleyse..