PHP ve Smarty ikilisini kullanıyorsanız birgün mutlaka çok dilli site yapma ihtiyacınız olacaktır.
Smarty temalarınıza dil desteği eklemek için birkaç yöntem var.
Bunlardan en basiti farklı dillere farklı .tpl ler oluşturmak. Uzun vadede çok masraflı bir iş olarak görünüyor. Bu şıkkı eleyelim.
Benim istediğim yönetilebilen diller ekle, çıkart, tercüme et gibi seçenekleri olan bir panel.
Öncelikle veritabanını tasarlayalim:
3 tablomuz var; diller, diller için key tanımlamaları, keylerin tercümeleri.


CREATE TABLE `lang` (
`id` int(10) unsigned NOT NULL auto_increment,
`ad` varchar(255) NOT NULL,
`kod` varchar(3) NOT NULL,
`flag` varchar(255) NOT NULL,
`aktif` tinyint(4) NOT NULL default ‘0′,
PRIMARY KEY (`id`),
UNIQUE KEY `kod` (`kod`),
KEY `aktif` (`aktif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


CREATE TABLE `lang_keys` (
`id` int(10) unsigned NOT NULL auto_increment,
`key` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `lang_keys_translate` (
`id` int(10) unsigned NOT NULL auto_increment,
`lang_id` int(10) unsigned NOT NULL,
`key_id` int(10) unsigned NOT NULL,
`display` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `lang_id` (`lang_id`,`key_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Dilleri ve tercumeleri bu 3 tabloda tutuyorum. Tabiki okurken sürekli burdan okuma işlemi yapmayacağız memcacheden okuyacağız.

Örnek Senaryo:
Türkçeye ait tüm key’ler ve key tercüme değerlerinden bir dizi oluşturuyrum ve memcache’e atıyorum.
diller_tercume_tr

Almanca’ya ait tüm key’ler ve key tercüme değerlerinden bir dizi oluşturuyrum ve memcache’e atıyorum.
diller_tercume_de

Aktif dil hangisi ise memcachden bu diziyi okuyup smarty’ye (l) olarak assign ediyorum.
$smarty->assign(’l',$diller_tercume_tr);


smarty .tpl temalarımda da şöyle bir değişiklik var :
{$l.USERNAME} : <input type=”text” name=”username”>
{$l.PASSWORD} : <input type=”password” name=”password”>


Mantık olarak bu şekilde, tabi bu yontem daha da geliştirilebilir.
Böylece tercüme paneli, yeni dil ekleme, dilleri aktif pasif etme işlmeleri kolayca yapılabiliyor.
Tercumanlara panel kullanıcısı acip anında ceviri işlemlerinde kolaylik sağlıyor.


Kaynak : AyhanBaris.com Yazılım Uzmanı Blog Arsivi PHP UTF8 Memcache Samrty Dil desteği ve Çok Dilli Site Yapımı