Çoklu dil sağlamaya çalışıyorsanız sistemi çeviriyle uğraştırmak son derece gereksiz bir olay olur. Ortalama bir sitedeki toplam statik metinler olsa olsa 50-100 tane olur zaten. Oturup sağlamak istediğiniz her dil için bu metinleri çevirip bahsettiğiniz değişkenler için
{degisken} tarzı bir format belirleyip bir dosyaya kaydetmek ve basit bir fonksiyonla bu metinleri gerekli yerde göstermek daha mantıklı olur. Fonksiyonun en temel hali:
function text()
{
// fonksiyona gönderilen tüm parametreler
$args = func_get_args();
// ilk parametre array'den ÇIKARILIP $textCode değişkenine atanır.
// çünkü ilk parametre, istenilen metnin dil dosyasında belirtilen kodudur
$textCode = array_shift($args);
// getCurrentLanguageCode TEMSİLİ FONKSİYONDUR
// sitedeki aktif dil için belirlenmiş kodu döndürür
// 'tr', 'en', 'de', 'fr' gibi
$language = include 'dilDosyalarininBulunduguKlasor/' . getCurrentLanguageCode() . '.php';
$text = $language[$textCode];
// yerine konulması gereken parametre varsa
if (count($args) > 0)
{
// her bir parametre...
foreach ($args as $arg)
{
// ...metindeki soru işareti ile değiştirilir
str_replace(' ? ', ' ' . $arg . ' ', $text);
}
}
return $text;
}Bir dil dosyasının da örnek hali:
<?php
return array(
'selamlamaMetni' => 'Merhaba, ?'
);<?php
$veritabanindanGelenIsim = 'Hkan';
// Ekrana "Merhaba, Hkan" stringini yazdırır
echo text('selamlamaMetni', $veritabanindanGelenIsim);Bilgi: Dikkat çektiyse dil dosyasında doğrudan
return yaptım array'i. Bu şekilde, fonksiyondaki
$language değişkenine dosyada return edilen array atanıyor direk. Geri kalan her şeyi kod içinde yorum satırlarıyla açıklamaya çalıştım.
Bilgi: Fonksiyonu direk kullanmanızı önermem. Zira fonksiyon her çağırıldığında dil dosyasını tekrar değişkene atıyor. String buffer konularında nasıl bir yönetimi var PHP'nin bilmiyorum ama bu yöntemin performans düşüşü sağlayacağını düşünüyorum. Ordaki yöntem yerine, fonksiyondan hemen önce gerekli dosyaları include dile değişkene atayıp fonksiyondan global yordamıyla ile erişilmesi daha mantıklı olur.
Kolay gelsin.