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.

Bu yöntemi kullandığım site : www.soydaslar.net

Farklı bir yaklaşım da surada var : http://www.smarty.net/manual/en/language.config.variables.php

>

Cevapla

Son Yazılar :

utf8 general - utf8 turkish

utf8 general ============================================================= Tablo : DROP TABLE IF EXISTS `tt`; CREATE TABLE IF NOT EXISTS `tt` ( `ad` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tt` (`ad`) VALUES (’istanbul’), [...]

utf8 general - utf8 turkish

utf8 general ============================================================= Tablo : DROP TABLE IF EXISTS `tt`; CREATE TABLE IF NOT EXISTS `tt` ( `ad` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tt` (`ad`) VALUES (’istanbul’), [...]

utf8 general - utf8 turkish

utf8 general ============================================================= Tablo : DROP TABLE IF EXISTS `tt`; CREATE TABLE IF NOT EXISTS `tt` ( `ad` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tt` (`ad`) VALUES (’istanbul’), [...]

utf8 general - utf8 turkish

utf8 general ============================================================= Tablo : DROP TABLE IF EXISTS `tt`; CREATE TABLE IF NOT EXISTS `tt` ( `ad` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tt` (`ad`) VALUES (’istanbul’), [...]

if(5==$deger) yada if ($deger==5)

if(5==$deger) yada if ($deger==5) Sizin de dikkatinizi çekmiştir, Bazı projelerde alıştığımız if şartını ters yazıyorlar; if ($deger==5) yerine if(5==$deger) bu yazımın kaynağı C’den geliyor. = atama. == eşit mi karşılaştırması. C türevi tüm dillerde karşılaştırma operatöri == ‘ dir. Yazılımcılar dalgınlık/unutkanlık ile if’lerde == yerine = (tek eşit) kullanırlarsa büyük bir mantık hatasına ve bug’a sebep olurlar. # root [...]