• 25-09-2012, 17:17:03
    #1
    Şuanda kodlamakta olduğum sistemde 4 dil seçeneği olması gerekiyor. (Türkçe, İngilizce, Arapça ve Rusça).

    İlk başta Türkçe ve İngilizce olarak direk yayınlanacak olan siteye kısa bir süre içinde Arapça ve Rusça dilleri de eklenecek. Bende bunu düşünerek, çevirmenler içinde kolaylık olması açısından çevirileri veritabanından alayım ki yönetim panelinden rahatlıkla çeviri yapabilsinler dedim. Oluşturduğum veritabanı yapısı şu şekilde.

    INSERT INTO `sys_languages` (`id`, `tag`, `tr`, `en`, `ru`, `ar`) VALUES
    (1, 'lg_home', 'Anasayfa', 'Homepage', 'дома', 'منزل');
    (2, 'lg_about', 'Hakkımızda', 'About Us', 'О компании', 'منحول بنا');
    Sizce tablo yapım doğru mu? Değilse nasıl yapmalıyım. İlk defa çoklu dil desteği içeren bir site yapacağım için soruyorum bunları. Şimdiden cevaplarınız için teşekkür ederim.
  • 25-09-2012, 18:06:11
    #2
    Sayfada gösterilecek olan tüm metinleri veritabanından çekmek doğru olmaz. Yüksek trafikli bir sistemse eğer bu, bir süre sonra veritabanı ciddi anlamda memory yüklenmesine sebep olacaktır.

    Bunun yerine, en basit haliyle her bir dil dosyası için bir adet php dosyası oluştur en.php, tr.php.. gibi.

    Dil dosyalarının içindeki her öğeyi arraylar'da tut.

    Örn:
    <?php
    // tr.php
    $dil['anasayfa'] = 'Anasayfa';
    $dil['hakkimizda'] = 'Hakkımızda';
    ?>
    
    <?php
    // en.php
    $dil['anasayfa'] = 'Homepage';
    $dil['hakkimizda'] = 'About Us';
    ?>
    
    <?php
    // ru.php
    $dil['anasayfa'] = 'дома';
    $dil['hakkimizda'] = 'О компании';
    ?>
    Tercümanlar da basitçe tırnak içindeki alanları düzelterek tercümeyi yapabilirler.
  • 25-09-2012, 18:10:31
    #3
    BlacKJacKJoE adlı üyeden alıntı: mesajı görüntüle
    Sayfada gösterilecek olan tüm metinleri veritabanından çekmek doğru olmaz. Yüksek trafikli bir sistemse eğer bu, bir süre sonra veritabanı ciddi anlamda memory yüklenmesine sebep olacaktır.

    Bunun yerine, en basit haliyle her bir dil dosyası için bir adet php dosyası oluştur en.php, tr.php.. gibi.

    Dil dosyalarının içindeki her öğeyi arraylar'da tut.

    Örn:
    <?php
    // tr.php
    $dil['anasayfa'] = 'Anasayfa';
    $dil['hakkimizda'] = 'Hakkımızda';
    ?>
    
    <?php
    // en.php
    $dil['anasayfa'] = 'Homepage';
    $dil['hakkimizda'] = 'About Us';
    ?>
    
    <?php
    // ru.php
    $dil['anasayfa'] = 'дома';
    $dil['hakkimizda'] = 'О компании';
    ?>
    Tercümanlar da basitçe tırnak içindeki alanları düzelterek tercümeyi yapabilirler.
    Fazla trafiği olan bir site değil. Uluslararası bir şirketin resmi web sayfası. Günde 50 kişi ancak giriyor. Veritabanından çekmenin pek sıkıntı yaratacağını düşünmediğim için böyle yapıyorum.
  • 25-09-2012, 18:24:44
    #4
    veritabanından çekmek sıkıntı yaratmaz bencede traik fazla değilse tabiki ancak söylede bir durumda sabit olarak tüm veriler için db ye alan mi açıcaksın ? buda önemli!..
  • 25-09-2012, 18:28:34
    #5
    neptun adlı üyeden alıntı: mesajı görüntüle
    veritabanından çekmek sıkıntı yaratmaz bencede traik fazla değilse tabiki ancak söylede bir durumda sabit olarak tüm veriler için db ye alan mi açıcaksın ? buda önemli!..
    Dil değerleri için sürekli veri girişi yapacağım.

    Mesela:

    1 lg_home Anasayfa Homepage xxx yyy
    2 lg_contact İletişim Contact xxx yyy
    3 lg_about Hakkımızda About Us xxx yyy

    gibi sürekli veri girişi yapacağım.
  • 25-09-2012, 20:24:22
    #6
    Eğer dil sistemi için dinamik bir yönetim paneli yapacaksan, veritabanında tutman daha mantıklıdır. Çünkü müşterine şu dosyadaki şurayı düzenleyin, şunu ekleyin demek pek hoş olmaz. Yük kısmına gelince, zaten cache sistemleri kullanmadan yüksek trafikli site yönetmek olmaz. Gereksiz yere kaynak tüketmeye gerek yok.


    Bu arada benim genelde kullandığım dil yapısı için veritabanı örneği vermek istiyorum.


    Kalıp Tablosu (id | kalip_kodu)
    --------------------
    1 - ust_menu_anasayfa
    2 - ust_menu_iletisim
    3 - ust_menu_hakkimizda


    Dil Tablosu (id | dil_kod | ad)
    --------------------
    1 - tr - Türkçe
    2 - en - İngilizçe


    Çeviri Tablosu (id | dil_id | kalip_id | ceviri)
    --------------------
    1 - 1 - 1 - Ana Sayfa
    2 - 1 - 2 - İletişim
    3 - 1 - 3 - Hakkımızda
    4 - 2 - 1 - Homepage
    5 - 2 - 2 - Contact
    6 - 2 - 3 - About Us
  • 25-09-2012, 21:01:04
    #7
    mtn adlı üyeden alıntı: mesajı görüntüle
    Eğer dil sistemi için dinamik bir yönetim paneli yapacaksan, veritabanında tutman daha mantıklıdır. Çünkü müşterine şu dosyadaki şurayı düzenleyin, şunu ekleyin demek pek hoş olmaz. Yük kısmına gelince, zaten cache sistemleri kullanmadan yüksek trafikli site yönetmek olmaz. Gereksiz yere kaynak tüketmeye gerek yok.


    Bu arada benim genelde kullandığım dil yapısı için veritabanı örneği vermek istiyorum.


    Kalıp Tablosu (id | kalip_kodu)
    --------------------
    1 - ust_menu_anasayfa
    2 - ust_menu_iletisim
    3 - ust_menu_hakkimizda


    Dil Tablosu (id | dil_kod | ad)
    --------------------
    1 - tr - Türkçe
    2 - en - İngilizçe


    Çeviri Tablosu (id | dil_id | kalip_id | ceviri)
    --------------------
    1 - 1 - 1 - Ana Sayfa
    2 - 1 - 2 - İletişim
    3 - 1 - 3 - Hakkımızda
    4 - 2 - 1 - Homepage
    5 - 2 - 2 - Contact
    6 - 2 - 3 - About Us
    Benim yapmaya çalıştığım invision power board'daki gibi tek tabloda tutup, bir etiketin 4 dile çevirisini tek seferde yapabilmek. Sanırım doğru yoldayım
  • 25-09-2012, 21:21:54
    #8
    Bu şekilde devam et. Ancak, tavsiyem şu olabilir; verileri her seferinde veritabanından değil de, json olarak sakladığın bir dosyadan çekebilirsin. Günde bir defa veritabanındaki veri ile json dosyasındaki verileri eşlesen yeter sanırım.
  • 26-09-2012, 02:09:10
    #9
    Üyeliği durduruldu
    ben olsam hiç uğraşmam 4 dilse 4 klasöre kur 4 veri tabanına bağla gitsin.