• 06-03-2020, 13:00:24
    #1
    Merhaba

    bir proje için çoklu dil sistemi yapıyorum, çoğu alanları hallettim sorunsuz olarak çalıştırıyorum ama bazı veriler var veritabanından çektirdiğim bunlarıda çoklu dil yapmak için veritabanında ilgili tablolara dillerine göre sütünlar açtım fakat tr.php ve en.php 'e bu durumu nasil belirtirim ? site ingilizce ise şu tabloyu çekmelisin nasil diyebilirim fikri olan varmı bir saattir düşünüyorum cevap bulamadım

    kod yapısı;


    header.php;
     <?php
        session_start();
        if (!$_SESSION["dil"]){
            require("tr.php");
        }else {
            require("".$_SESSION["dil"].".php");
        }
    ?>
    dil.php

    <?php
    session_start();
    $dil    =strip_tags($_GET["dil"]);
    if ($dil =="tr" || $dil == "en"){
        $_SESSION["dil"] = $dil;
        header("Location:index.php");
    }else {
        header("Location:index.php");
    }
    
    ?>
    en.php

    <?php
    $dil = array(
    "anasayfa"        => "Home",
    "hakkimizda"        => "About Us",
    "ürünlerimiz"        => "Product",
    "haberler"        => "News",
    "iletisim"        => "Contact",
    "dilsecim"        => "Languages", 
    "butonisim"        => "Read More",
    "popyazi"        => "Popular Articles",
    "telefon"        => "Phone Information",
    "adres"        => "Adress Information",
    "mail"        => "E-Mail Adress",
    "iletisimform"        => "Contact Us",
    "gonderbuton"        => "Submit",
    );
    ?>
  • 06-03-2020, 13:16:52
    #2
    Kurumsal PLUS
    en.php
    <?php
    $Words = array ( "Homepage", "About Us" );
    ?>
    tr.php
    <?php
    $Words = array ( "Anasayfa", "Hakkımızda" );
    ?>

    dil.php
    <?php
    session_start();
    if (isset($_SESSION["Dil"]) AND !empty ($_SESSION["Dil"])) {
    if ($_SESSION["Dil"] == "TR") {
    require_once("tr.php");
    $dbColumn = "foo"; // Dil eğer Türkçe ise tabloda ki "foo" sütununu baz al.
    } elseif ($_SESSION["Dil == "EN"]) {
    require_once("en.php");
    $dbColumn = "bar"; // Dil eğer İngilizce ise tabloda ki "bar" sütununu baz al.
    } else {
    require_once("tr.php");
    $dbColumn = "foo";
    }
    }
    ?>
    ornek.php
    <?php
    /* Dil seçimi yapıldığını yani $_SESSION["DIL"] değerinin dolu olduğunu farz ediyorum. */
    require_once("dil.php");
    
    $query = "SELECT * FROM haberler";
    $result = mysql_fetch_array($query);
    
    $haberContent = $result[$dbColumn];  // Dil değerine bak ona göre contenti çek. foo ise Türkçe, bar ise İngilizce.
    ?>
    Umarım mantığını kavrayabilmişsinizdir, test etmedim.
  • 06-03-2020, 13:17:30
    #3
    İki şekilde olur, 1. si session ile url yapısını değiştirmeden ikincisi url yapısındaki dili alarak, sen ikisinide harmanlamışsın birinden birini tercih etmelisin, benim tavsiyem url yapısındaki dili çekmek olur
    session veya cookie kullanmadan url yapısında ne varsa onu alırsın dil olarak kullanırsın


    <?php
    
        
        $dil = strip_tags(addslashes($_GET['dil']); #seflink kullanıyorsan kendine göre düzenlersin
    
    
        if(empty($dil)){
            $dil = 'tr'; #veya default dilin hangisiyse
        }else{
            if ($dil =="tr" || $dil == "en"){
                $dil = $dil;
            }
        }
        if($dil){
            include($dil.'.php');
        }else{
            die('dil dosyası yüklenemedi.');
        }
        
        echo '<title>'.$dil_php_dizgesi['home'].'</title>';
        
    
    ?>
  • 06-03-2020, 13:19:48
    #4
    Mysql kodunu çalıştırmak istediğiniz yer neresi ben tam soruyu anlayamadım açıkçası.
    Myqsl tablonuzdan küçük bir örnek goruntunekler misinız.
  • 06-03-2020, 13:23:33
    #5
    aslında sorum şu,

    sitedeki sabit terimleri php dosyalarından direk çektiriyorum veritabanı bağlantısı olmadan (örneğin: menü isimleri, buton isimleri gibi...) ama veritabanından gelen veriler var ürünler, hizmetler hakkımızda açıklamaları gibi..

    şimdi bu hizmetleri hakkımızda tamamen Türkçe veritabanında tutuluyor bende diyorum ki, hakkımızda tablosunda aciklama olan hakkımızda sütününa ek olarak aciklama_en olarak bir sütün açip Türkçe veriyi İngilizce olarakda yazıp veritabanına göndereyim ama bu kayıtlı olan veriyi neye göre çekebilirim takıldığım nokta bu url'e göre çekip v.s sistemi pek değişmek istemiyorum açıkçası
  • 06-03-2020, 13:24:22
    #6
    Şöyle yapılabilir;

    çoklı dil kullanılacak tablo adı 'posts' olsun
    1. seçenek -> tek tabloda halletmek (tavsiye etmem)
    posts tablosuna bir sütun ekleyin dil_kodu (languages diye tablo açıp dil kodu üzerinden dil_id alıp posts tablosunda dil_id de tutabilirsiniz)
    posts a veri eklerken her dil kodu için aynı tabloya farklı dil kodu ile ekleme yapabilirsiniz. önyüze çekerkende sadece where dil_kod(ya da dil_id) ekleyip geçerli dildeki postu alabilirsiniz.

    2. seçenek -> 2 tabloda yapmak;
    posts tablosunda postun ortak-sabit bilgilerini tutabilir ve sadece çoklu dil olacak yerleri (örn başlık, content..) 'post_details' diye tablo açıp burada post_id,post_title,post_content....,dil_kodu(ya da üstte yazdığım gibi dil tablosundan dil_id) yapmak
    önyüze çekerken de 2 sorgu ile alabilir ya da tek sorguda JOIN ekleyerek yine where dil_kod ile alabilirsiniz
  • 06-03-2020, 13:25:21
    #7
    ynR adlı üyeden alıntı: mesajı görüntüle
    aslında sorum şu,

    sitedeki sabit terimleri php dosyalarından direk çektiriyorum veritabanı bağlantısı olmadan (örneğin: menü isimleri, buton isimleri gibi...) ama veritabanından gelen veriler var ürünler, hizmetler hakkımızda açıklamaları gibi..

    şimdi bu hizmetleri hakkımızda tamamen Türkçe veritabanında tutuluyor bende diyorum ki, hakkımızda_en olarak bir tablo açip Türkçe veriyi İngilizce olarakda yazıp veritabanına göndereyim ama bu kayıtlı olan veriyi neye göre çekebilirim takıldığım nokta bu url'e göre çekip v.s sistemi pek değişmek istemiyorum açıkçası

    dil adlı stun eklersiniz veritabanını bozmadan veri eklerken dil sutununa hangi dil eklendiğini belirttikten sonra sorgularken ek olarak where dil = '$dil' ile hangi dilde görüntüleyeceğinizi yazarsınız