Merhabalar,Bu ilk yazimda sizlerle pek cok projede kullandigim ve birden fazla dil ile calisan sistemlerde oldukca kolaylik saglayan bir yapiyi paylasmak istedim.Bildiginiz gibi, birden fazla dilden olusan sistemlerde her dil icin sayfa iceriginin ya da sayfadaki sabit ogelerin (menuler, basliklar vb) degismesi mesakatli bir islemdir.Daha once de php ile dil destegi hakkinda yazi gonderilmisti ancak bu sistem biraz daha farkli calismakta.Oncelikle, elimizin altinda bir adet “Language” sinifinin oldugunu belirteyim. Bu sinifin temelde yaptigi islem, dogru dil dosyasini okuyarak kendi icerisinde tutmak ve daha sonra istenildigi zaman aranan sabitin dil dosyasindaki karsiligini getirmek.Herhangi bir dil icin sabitlerimiz ve metin karsiliklarini ise xml formatinda sakliyoruz. Bunun bizim icin iki avantaji var, birincisi programci olmayan, soz gelimi metin editorlugu yapan birisinin gerektiginde dil dosyasi yaratmasi / duzenlemesi kolaylasiyor, ikincisi MVC gibi yapilarda, View’in karmasik kod yiginlari ile dolmasini engelliyor.Lafi fazla uzatmayayim, sinifimiz soyle;xml_file = $file_path;$this->lang_array = array();$this->current_string = null;$this->char_pointer = null;$this->parser = xml_parser_create(“UTF-8″);xml_set_object($this->parser,&$this);xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,false);xml_parser_set_option($this->parser,XML_OPTION_SKIP_WHITE,true);xml_set_element_handler($this->parser,”tag_start”,”tag_end”);xml_set_character_data_handler($this->parser,”cdata”);}public function fetch($call_after=””){$this->fp = @fopen($this->xml_file,’r’);$this->raw = trim(@fread($this->fp,filesize($this->xml_file)));fclose($this->fp);$this->parse();if(!empty($call_after)){if(function_exists($call_after)){$call_after(&$this);}}}public function parse(){xml_parse($this->parser,$this->raw);xml_parser_free($this->parser);}#################### XML PARSER FUNCTIONS – DO NOT MODIFY ######################private function tag_start($parser,$name,$att){switch($name){case ‘string’:$this->current_string = new stdClass();$this->current_string->key = $att[“key”];break;}}private function tag_end($parser,$name){switch($name){case ‘string’:$this->lang_array[$this->current_string->key] = $this->current_string->data;break;}}private function cdata($parser,$data){$data = trim($data);if($data){$this->current_string->data = $data;}}#################### END OF XML PARSER FUNCTIONS ######################}?> Bu sinifin okuyabildigi dil dosyasinin yapisi ise asagidaki sekilde;
PAYLAŞ!]]>








Gelelim kullanim sekline. Oncelikle, Language sinifinin bulundugu dosyayi include ederek ise basliyoruz. Daha sonrasi ise tercih edilen dilin yuklenmesi ve istenen metnin ekrana basilmasindan ibaret.include_once “includes/class.lang.php”;$parser = new Language(“lang/tr-TR.xml”);$parser->fetch();….print $parser->lang_array[“SHARE_NOW”]; Hepsi bu kadar. Umarim ise yarar.Hakan Sulun