Merhaba arkadaşlar.
Resellerclub apileri ile bir sistem yazıyorum.
Apiden gelen bazı değerler doğal olarak ingilizce ve bende bu değerleri çevirip Türkçe olacak şekilde ayarlamak için bir fonksiyon yazdım.
.po ve .mo dosyaları ile dil desteği verme olayını çok kullandım fakat bir türlü alışıp ısınamadım bu duruma. Yeni eklenen her kelime için sürekli 3. bir programa ihtiyaç duymak beni rahatsız etti.
Yazdığım fonksiyon dil dosyalarında değerler arttığı zaman aşırı bir yavaşlamaya sebep olabilir mi diye sormak istedim. Eğer aşırı derecede bir yavaşlamaya neden olmayacaksa kullanacağım fakat aşırı yavaşlamaya neden olacaksa mecburen .po lara geri döneceğim.
Çeviri Fonksiyonu
function cevir($metin){
global $dilmetin;
$metin = trim($metin);
if(!empty($dilmetin[$metin])){
return $dilmetin[$metin];
}else{
$sonuc = degiskenara($metin);
if(empty($sonuc)){
return $metin;
}else{
return $sonuc;
}
}
}
function degiskenara($gelen){
global $dilmetin;
$array = array_keys($dilmetin);
$matches = preg_grep ('#{(.*?)}#is', $array);
foreach ($matches as $key => $value) {
preg_match_all('#{(.*?)}#is', $value, $output, PREG_PATTERN_ORDER);
$order = $output[0];
$replace = '(.*?)';
$yeni[$key] = str_replace($order, $replace, $value);
if(preg_match('/'.$yeni[$key].'$/',$gelen,$cikis)){
$cikti = $dilmetin[$matches[$key]];
$cikartik = array_splice($cikis, 1, count($cikis));
return str_replace($order, $cikartik, $cikti);
}
}
return false;
}Örnek Dil Array
$dilmetin = array(
'Active' => 'Aktif',
'InActive' => 'Pasif',
'Renewal of {domain} for {yil} year' => '{domain} için {yil} yıllık domain yenilemesi',
'Registration of {domain} for {yil} year' => '{domain} için {yil} yıllık domain kaydı',
'Required parameter missing: {deger}' => 'Gerekli parametre eksik: {deger}',
);Örnek Kullanım
echo cevir("Active").'<br>';
echo cevir("Registration of abc123.com for 1 year").'<br>';
echo cevir("Renewal of abc123.com for 1 year").'<br>';
echo cevir("Required parameter missing: customer-id").'<br>';Çıktı:
Aktif
abc123.com için 1 yıllık domain kaydı
xyz987.net için 1 yıllık domain yenilemesi
Gerekli parametre eksik: customer-id
Sanırım kodlar ile ne yapmak istediğim anlaşılmıştır.
Bu işlemi gettext dışında nasıl yapabilirim?
Üstte yazdığım fonksiyon kullanışlımıdır sizce?
En çok merak ettiğimde performasını tabikide.
çoğul kelimelerde sıkıntı çıkaracak birşey.
örneğin üsteki dizide sadece 1 yıllık ingilizce kelimeler yer alıyor.
fakat 1 den büyük olunca years olacağından dizide bulamayacak ve girilen ingilizce değeri olduğu gibi geri döndürecek. buda sıkıntı olacak benim açımdan.
çoğul kelime döndürebilme ihtimaline karşı bir tane daha ekleme yaparak years yazmam gerekiyor.
Yada bunları kaldır çöpe at deyipte bu işe yarayan güzel bir class, function hazır var al kullan diyebilir misiniz yada tek çare gettext mi?