PHP Çoklu dil sistemi yapımı

  2016/10/02 17:04 • Ana Sayfa > PHP

Son yıllarda, ülkemizde üretilen projelerin büyük kısmı daha fazla kullanıcıya hitap edebilmek amacıyla genellikle Türkçe ve ingilizce üretiliyor. Eğer aynı şekilde, iki veya daha fazla dile sahip proje yapmayı düşünüyorsanız; olabildiğince kısa ve öz tutmaya çalışacağım bu makaleyi gözden geçirmenizi öneririm.

Burada anlatacaklarım veritabanını bağlamaz, PHP dosyalarında çalışmanıza imkan verir. Makalenin sonunda veritabanında neler yapabileceğinizi de anlatacağım. Ayrıca aşağıdaki basit ve hızlı kullanımdır. Daha gelişmiş ve önerilen, WordPress sisteminde de kullanılan .po dosyası ile yönetilebilen GetText fonksiyonunu kullanabilirsiniz.

Oluşturulacak diller

İlk önce sistemde toplam kaç dil olacaksa bunları belirleyelim ve languages klasörü içinde aşağıdaki isimlerde dosyalar oluşturalım.

  • tr.php // Türkçe
  • en.php // ingilizce
  • de.php // almanca
  • fr.php // fransızca

Oluşturduğumuz bu dosyaların içine aşağıdaki formatta, her dil için farklı bir yapı giriyoruz. Aşağıdaki örnek tr.php içindir.

<?php
    $lang['home'] = 'Ana Sayfa';
    $lang['login'] = 'Giriş Yap';
    $lang['register'] = 'Kayıt Ol';
?>

Aynı dosyanın en.php için olanı ise şöyle olabilir;

<?php
     $lang['home'] = 'Home';
    $lang['login'] = 'Login';
    $lang['register'] = 'Register';
?>

Ve de.php & fr.php dosyalarını buna göre doldurabilirsiniz. Daha sonra kullanacağımız alanlarda, aşağıdaki kod örneği ile oluşturduğunuz dilleri yazdıracağız.

Örneğin: 

<?php echo $lang['lang']; ?>

Tarayıcı tabanlı dil seçme

Genellikle büyük uygulamalar IP ve tarayıcı dili seçeneğini bir araya getirir ve en doğru sonucu ortaya çıkartır fakat bu makalede basit bir uygulama hazırlayacağımız için direk olarak tarayıcı dili çekmeyi anlatacağım.

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);

Bu kod ile tüm büyük tarayıcılardan dil seçeneği çekilebilir. Alınan sonuç genellikle Türkçe için tr, ingilizce için en gibi olacak. Zira substr ile gelen sonucun ilk 2 harfini alıyoruz.

Şimdi aşağıdaki if else yapısı ile tarayıcı diline göre dil dosyasını ekleyelim.

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);

if ($lang == 'tr') {
  include_once('include/language/tr.php');
}elseif ($lang == 'en') {
  include_once('include/language/en.php');
}elseif ($lang == 'de') {
  include_once('include/language/de.php');
}elseif ($lang == 'fr') {
  include_once('include/language/fr.php');
}else{
  include_once('include/language/tr.php');
}

Burada yaptığımız işleme göre tarayıcının tr, en, de ve fr dillerinde olup olmadığı sorgulanıyor. Eğer bunların dışında bir dil ise, tekrar tr.php dosyasını çalıştırıyoruz. Yani sitenin global ana dili Türkçe olmuş oluyor.

Veritabanı işlemleri için çoklu dil özelliği

Her dil dosyasının içine farklı veritabanı bağlantı class'ı eklenebilir. Buna ek olarak, oluşturulan veritabanının aynısından diğer diller için de oluşturmanız gerekecektir. Ayrıca her tabloda birer tane dil sütunu eklenerek de çoklu dil sistemi rahatça kullanılabilir.

Yazar: Ercüment Çözer (@Felina)

2009 yılında gelen "internet için bir şeyler üretme isteği" doğrultusunda yazılım öğrenmeye başladım. Aradan geçen süre zarfında başta PHP ve Python olmak üzere, ticareti yapılabilir birçok şey öğrendim. Şu sıralar web ve mobil ortamda kodlama, tasarlama ve pazarlama konularındaki bilgilerimi pekiştirmek ve ihtiyaç halinde diğer insanlara da yardımcı olabilmek için KodLab.org'u kurdum. Freelance olarak kendi projelerimle ilgileniyorum.