Codeigniter’da Çoklu Dil Yapımı

Daha önceden’de Codeigniter ile ilgili çoklu dil desteği hakkında yazı yazmıştım fakat o kütüphane kullanımı hakkındaydı. Bu yazımda hem onun üstünden geçeceğim hem de daha çok eksikliğe yönelik yazacağım. Bunlar: language helper kullanarak sitede çoklu dil desteği vermek, manuel olarak kullanıcının seçtiği dil dosyasının yüklenmesi, dile göre url satırında dil kısa kodunun görüntülenmesi. Umarım bu konuda takılanlara yardımı dokunur bu yazımın. Biraz da kurallar dışına çıkan bir yazı bu çünkü yöntemler tamamen kendi buluşlarım, kullanmak isteyen faydalanabilir. Öncelikle çoklu dil desteği için dil dosyamızın olması gerektiğini söyleyeyim. Bu dil dosyası ya da dosyaları projenizin system/language/ dizini içerisindeki oluşturacağınız dil klasörünün içerisinde ya da application/language/ dizini içerisinde oluşturacağınız dil klasörü içerisinde olmalı. Codeigniter öncelikle system dizini içerisine bakar, belirttiğiniz dil dosyasını orada bulamazsa application dizinine bakar. Language helper ile alakalı daha fazla bilgiye buraya tıklayarak ulaşabilirsiniz. Biz şimdi bir dil dosyası oluşturalım. Dosya yolu : system/language/turkish/genel_lang.php

<?php
$lang[“hosgeldiniz”] = “Hoşgeldiniz”;
$lang[“buyrun”] = “İçeri buyrun”;
?>

Bir de ingilizce dil dosyası oluşturalım. Dosya yolu : system/language/english/genel_lang.php

<?php
$lang[“hosgeldiniz”] = “Welcome”;
$lang[“buyrun”] = “Please come in”;
?>

Bir tane controller dosyası oluşturalım. Dosya yolu: application/controller/Home.php

<?php
Class Home extends CI_Controller{
function index(){
$this->load->view(“home”);
}
}

Şimdi biraz önce belirttiğimiz view dosyamızı oluşturalım. Dosya yolu application/views/home.php

<html>
<head>
<title><?php echo lang(“hosgeldiniz”);?></title>
</head>
<body>
<h1><?php echo lang(“hosgeldiniz”);?></h1>
<h2><?php echo lang(“buyrun”);?></h2>
</body>
</html>

Sayfalarımızı tamamladıktan sonra ayarlarımızı yapalım. Öncelikle autoload dosyasımızdan (autoload dosyası application/config içerisinde bulunur) gerekli yeri düzeliyoruz ve aşağıdaki gibi language ifadesini ekliyoruz.

$autoload['helper'] = array('language','home','url');

Routes içerisinden aşağıdaki gibi default_controller olarak home’u belirliyoruz. Ayrıca aşağıdaki ayarlamaları da yapıyoruz. Dosya yolu : application/config/routes.php

$route['default_controller'] = 'home';
//Kullandığınız bütün dilleri burada home controller'ına yönlendirmelisiniz.
$route['tr'] = "home";
$route['en'] = "home";
//İlk gelen değer dil değeri olacağından dolayı bu şekilde ayarlama yapmamız gerekiyor.
$route['(:any)/home'] = "home";
//Eğer get ile değer göndermeniz gerekirse aşağıdaki gibi değerleri ikinci bilinmeyenden
//başlayarak çekmelisiniz. İlki dil değerini göndericektir.
$route['(:any)/sayfa/(:any)'] = "home/sayfa/$2";
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

Şimdi kullanıcının seçtiği dili yükleyebilmek için helper ve içerisinde birkaç fonksiyon oluşturcaz ayrıca kullanıcının sayfalar arasında geçiş yaparken seçtiği dili tanıyabilmek için cookie kullanıcaz, session da kullanılabilir. Helper dosyası oluşturalım. Dosya yolu : application/helpers/home_helper.php

function dilSecici($gelen=""){
$ci =& get_instance();
if($gelen==""){
if($ci->input->cookie("dil")==""){
$dil = dilSec();
}else{
$dil = dilSec($ci->input->cookie("dil"));
}
}else{
$dil = dilSec($gelen);
}
$cookie = array(
'name'   => "dil",
'value'  => $dil,
'expire' => '86500'
);
$ci->input->set_cookie($cookie,TRUE);
if($dil=='tr'){
$language = "turkish";
if (file_exists(APPPATH.'../system/language/'.$language.'/genel_lang.php')) {
$ci->lang->load("genel", $language);
}
}elseif($dil=='en'){
$language = "english";
if (file_exists(APPPATH.'../system/language/'.$language.'/genel_lang.php')) {
$ci->lang->load("genel", $language);
}else{
$ci->lang->load("genel", "turkish");
}
}else{
$ci->lang->load("genel","turkish");
}
}
function dilSec($gelen=""){
$ci =& get_instance();
$url = $ci->uri->segment(1);
if($gelen==""){
if(dilDosyaIsmi($url)!=""){
return $url;
//$ci->session->set_userdata('dil', $url);
}else{
return "tr";
//$ci->session->set_userdata('dil', "turkish");
}
}else{
if(dilDosyaIsmi($gelen)!=""){
return $gelen;
//$ci->session->set_userdata('dil', $url);
}else{
return "tr";
//$ci->session->set_userdata('dil', "turkish");
}
}
}
function dilUrl(){
$ci =& get_instance();
$dil = $ci->input->cookie("dil");
//$dil = $ci->session->userdata("dil");
return $dil."/";
}
function dilDosyaIsmi($gelen){
if($gelen=="tr"){
return "turkish";
}elseif($gelen == "en"){
return "english";
}else{
return "";
}
}

Controller dosyamızı da şu şekilde değiştirelim.

<?php
Class Home extends CI_Controller{
function index(){
        dilSecici();
        $this->load->view("home");
   }
function dilDegistir($gelen){
        dilSecici($gelen);
        redirect("home");
    }
}

View dosyamıza da bir link ekleyip sistemi test edelim. Dosya yolu: application/views/home.php

<html>
<head>
<title><?php echo lang("hosgeldiniz");?></title>
</head>
<body>
<h1><?php echo lang("hosgeldiniz");?></h1>
<h2><?php echo lang("buyrun");?></h2>
<a href="<?php echo base_url()."index.php/".dilUrl();?>">Ana Sayfa</a>
<h3>Dil Seç</h3>
<a href="<?php echo base_url();?>index.php/home/dilDegistir/tr">Türkçe</a> -
<a href="<?php echo base_url();?>index.php/home/dilDegistir/en">İngilizce</a>
</body>
</html>

Helper dosyasında varsayılan olarak türkçe dili seçili ve helper dosyasının tekrardan gözden geçirilmesi, sadeleştirilmesi gerek. Amacım çoklu dil yapımı ile ilgili alternatif bir yöntemi göstermek ve bu konuyu araştıranlara fikir vermek istedim. Projenin dosyalarına aşağıdaki linkten ulaşabilirsiniz. Projeyi indirmek için tıklayın.

Reklamlar

Codeigniter’da Çoklu Dil Yapımı” üzerine 4 yorum

  1. Merhaba, proje dosyası silinmiş tekrar yükleme şansınız var mı? Gerçekten anlatım güzel elinize sağlık.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s