Web Sitelerinde Çoklu Dil Yapısı

php-coklu-dil-yapma

Bu makalede php çoklu dil desteği olan web sitesi nasıl yapılır konusunu anlatmaya çalışacağım.

Niçin Gerekli?

Günümüzde firmalar için uluslar arası pazara erişmek oldukça kolay. Bu sebeple artık web sitelerinde  birden fazla dil seçeneği zorunlu bir özellik haline geldi.

Nasıl?

Aslında mantık oldukça basit. Dile göre değişen kısımları bir değişkene atayacağız ve dil seçimine göre bu değişkenlerin değerini değiştireceğiz.

Uygulama

Şimdi örnek bir web sitesi düşünelim. Ben konuyu anlatmak adına sitenin menüsü üzerinden gideceğim. Siz de aynı mantıkla sitenin diğer kısımlarına bunu uygulayabilirsiniz. Örneğin sitemizde menümüz şu şekilde olsun.

<ul>
    <li><a href="index.php">Anasayfa</a></li>
    <li><a href="hakkimizda.php">Hakkımızda</a></li>
    <li><a href="iletisim.php">İletişim</a></li>
</ul>

Şimdi menüde yer alan menü isimleri yerine değişkenler yazıyoruz.  Böylece menü isimlerinin dinamik bir hal almasını sağlıyoruz.

<ul>
    <li><a href="index.php"><?php echo $diller['anasayfa'];?></a></li>
    <li><a href="hakkimizda.php"><?php echo $diller['hakkimizda'];?></a></li>
    <li><a href="iletisim.php"><?php echo $diller['iletisim'];?></a></li>
</ul>

Artık menü isimlerimiz dinamik. Sıradaki işlem bu değişkenlere seçilen dile göre uygun veriyi getirmek.

Öncelikle sitemizin menü isimlerini tanımlayacağımız dil dosyaları oluşturacağız. Bunun için dil isimli bir klasör oluşturup içine tr.php ve en.php adında iki adet dil dosyası oluşturalım ve değişkenlerimizi burada tanımlayalım.

$diller['title']      = "Test Sayfası - zaferkorucu.com";
$diller['anasayfa']   = "Anasayfa";
$diller['hakkimizda'] = "Hakkımızda";
$diller['iletisim']   = "İletişim";
$diller['title']      = "Test Page - zaferkorucu.com";
$diller['anasayfa']   = "Home";
$diller['hakkimizda'] = "About Us";
$diller['iletisim']   = "Contact";

Burada her dil dosyasında her bir menünün Türkçe ve İngilizce karşılığı için bir değişken oluşturuyoruz. Şimdi dil seçimi olayına bakalım. Dil seçimini session ile tutacağız.

<?php
# Seçili dili kontrol ediyoruz
if ($_SESSION['dil'] == "en") {
  $dil = "en";
}
elseif ($_SESSION['dil'] == "tr") {
  $dil = "tr";
}
else {
  # Eğer dil seçilmemişse tarayıcı dilini varsayılan dil olarak seçiyoruz
  $dil = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
}

Burada sistemde seçilmiş bir dil varsa bu seçimi session’dan alıp değişkene atıyoruz. Eğer herhangi bir seçim yapılmamışsa tarayıcı dilini alıp onu varsayılan dil yapıyoruz.

Sonraki aşama olarak dil seçme butonlarına bakalım. Dil seçim butonları yardımı ile kullanıcı seçimini kodlarımıza iletiyoruz. Ben normalde bu işi jQuery ile yapıyorum ancak burada get metodu üzerinden örnek vereceğim.

Dil butonlarımız da şu şekilde olsun.

<a class="dilSec" href="?dil=tr">TR</a>
<a class="dilSec" href="?dil=en">EN</a>

Burada dil seçimini get metodu ile gönderiyoruz.

Son olarak seçilen dilin sessiona atanması olayına bakalım. Burada get ile gelen dil verimizi session’a atıyoruz.

<?php
# Dil seçimi yapılmışsa
if($_GET['dil']) {
   # Dil seçimini session'a ata.
   $_SESSION['dil'] = $_GET['dil'];
   # Anasayfa'ya yönlendir.
   header("Location:index.php");
}

Şimdi kodları toparlayıp yapıya genel olarak bakalım.

<?php
# Session başlat
session_start();
# Dil seçimi yapılmışsa
if($_GET['dil']) {
   # Dil seçimini session'a ata.
   $_SESSION['dil'] = $_GET['dil'];
   # Anasayfa'ya yönlendir.
   header("Location:index.php");
}
# Seçili dili kontrol ediyoruz
if ($_SESSION['dil'] == "en") {
   $dil = "en";
}
elseif ($_SESSION['dil'] == "tr") {
   $dil = "tr";
}
else {
   # Eğer dil seçilmemişse tarayıcı dilini varsayılan dil olarak seçiyoruz
   $dil = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
}
# Dil dosyamızı include ediyoruz
include 'dil/'.$dil.'.php';
?>
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <!-- Site Title -->
   <title><?php echo $diller['title'];?></title>
</head>

<body>
	
   <!-- Dil Seçim -->
   <a class="dilSec" href="?dil=tr">TR</a>
   <a class="dilSec" href="?dil=en">EN</a>
		
   <!-- Menü Yapısı -->
   <ul>
	<li><a href="index.php"><?php echo $diller['anasayfa'];?></a></li>
	<li><a href="hakkimizda.php"><?php echo $diller['hakkimizda'];?></a></li>
	<li><a href="iletisim.php"><?php echo $diller['iletisim'];?></a></li>
   </ul>
</body>	
</html>

Buraya kadar olan kısım sistemin temeli ve bu temelin sitenin ana yapısı üzerine uygulanışı üzerine idi. Ancak çoklu dil yapısında dil seçimi değiştiğinde seçilen dile uygun içeriği de getirmeniz gerekir. Bu kısım sizin veri tabanı yapınız ile alakalı. Ben her bir dildeki veri için ayrı bir kayıt girildiği duruma göre olayı kısaca anlatacağım.

//Tablo Yapısı

id     baslik                        icerik

1       Hakkımızda            Hakkımızda Yazısı.

2      About US                 About us text.

Buna göre hakkimizda.php’de şöyle bir kod yapısı işimizi görecektir.

if ($dil == "en") {

     $ID = 2;

}else {

     $ID = 1;

}

Sql sorgusu yaparken de WHERE id = ‘$ID’ şeklinde bir seçim bize uygun içeriği getirecektir.

Dil yapısı genel olarak böyle. Bu mantık üzerine kodları kendi sisteminize uyarlayabilirsiniz.

8 üzerine düşünceler “Web Sitelerinde Çoklu Dil Yapısı

  1. furkan

    ya veriler veritabanından çekiliyor ise o zaman nasıl bir yol izleyebiliriz çünkü veriler sabit olmayacak belki yeni bir ürün eklenicek admin panelden onlara nasıl çoklu dil sağlayabiliriz

  2. zkorucu Yazının Yazarı

    Merhaba Furkan,
    Öncelikle elimizde dil verisi mevcut($dil). Burada içerik tablosunda bir dil kolonu oluşturup veriyi ona göre çektirebilirsin. örn where lang=$dil gibi

    1. gökhan şahin

      verdiğiniz kodu çalıştırdığımda burda dil tanımsız hatası verdi. Bu hatayı neden aldım bilen varmı ?

      if($_GET[‘dil’]) { }

      bende şöyle birşey yaptım:

      Şimdilik bi sıkıntı yok gibi benden başka o hatayı alan olmadı merak ediyorum

      1. gökhan şahin

        verdiğiniz kodu çalıştırdığımda burda dil tanımsız hatası verdi. Bu hatayı neden aldım bilen varmı ?

        if($_GET[‘dil’]) { }

        bende şöyle birşey yaptım:

        # Session başlat
        session_start();
        # Dil seçimi yapılmışsa
        if(empty($_SESSION[‘dil’])){
        echo ‘deneme’;

        # Eğer dil seçilmemişse tarayıcı dilini varsayılan dil olarak seçiyoruz
        $dil = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’],0,2);
        }
        else {
        # Seçili dili kontrol ediyoruz
        if ($_SESSION[‘dil’] == “en”) {
        $dil = “en”;
        }
        elseif ($_SESSION[‘dil’] == “tr”) {
        $dil = “tr”;
        }

        }
        # Dil dosyamızı include ediyoruz
        include ‘dil/’.$dil.’.php’;

        Şimdilik bi sıkıntı yok gibi benden başka o hatayı alan olmadı merak ediyorum

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir