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 :

PHP ile Çok Basit Bir Ziyaretçi Defteri Örneği

PHP ile Çok Basit Bir "Ziyaretçi Defteri Örneği" yapalım. Veritabanı tablomuz : PLAIN TEXT SQL: CREATE TABLE IF NOT EXISTS `ziyaretci` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `ad` varchar(60) NOT NULL,   `soyad` varchar(60) NOT NULL,   `email` varchar(255) NOT NULL,   `yorum` text NOT NULL,   `tarih` date NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=MyISAM  ; PHP kodlarımız: PLAIN TEXT PHP: <?php # form gonderidldi mi? if(!empty($_POST)){     [...]

Proxy Listesi

Proxy Listesine ihtiyacınız varsa : http://www.proxy-list.org adresini kullanabilirsiniz.

MySQL TRIM

UPDATE urun SET desc_urun = TRIM(TRAILING '<LI><A href="http:' FROM desc_urun) WHERE urun_id='5656' LIMIT 1; bu sorgu ile ürün açıklamasının sonunda yer alan hatalı html tagini siliyoruz. sadece hatalı olan ve sonda olan "<LI><A href="http:' FROM desc_urun" yi silecek.

Fonksiyon Hatırlatıcı windows masa üstü uygulaması

3 yıl kadar önce delphi ile yazdığım küçük bir windows masa üstü uygulaması. Görevi programcıya kullandığı dilin fonksiyonlarını hatırlatmak. 5sn,10sn,..vs ara ile ana penceresine bir fonksiyon adı ve ne işe yaradığı bilgisini getiriyor. Fonksiyon adları ve görevleri data.xml de (data.xml .exe program ile aynı dizinde olmalı) . isteyen arkadaşlar data.xml i faklı amaçlar için dönüştürebilirler. Mesela Türkçe-İngilizce sözlük kelime [...]

Aynı tablodan select edip update etme - mysql

Aynı talbodaki 1 nolu urunun açıklamasını 2 nolu ürünün açıklamasına set etme UPDATE urun_dt AS toTable, urun_dt AS fromTable SET toTable.desc_urun=fromTable.desc_urun WHERE toTable.urun_id=1AND fromTable.urun_id=2;