Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Çoklu Dil Desteği Ve Seçimi Yapmaya çalışıyorum mantık gerekli ?

Konu, 'PHP' kısmında emreuyguc tarafından paylaşıldı.

  1. emreuyguc

    emreuyguc Üye

    Kayıt:
    3 Mart 2014
    Mesajlar:
    41
    Beğenilen Mesajlar:
    1
    merhaba arkadaşlar

    yaptıgım projede müşteri sitenin çoklu dil desteği olmasını istedi tamam dedim ve yola koyuldum ama öyle basit birşey değil gibi geldi birkaç araştırma yaptım

    1.yöntem her oturum dili için farklı dil dosyası include ederiz basarkende $dil[homepage] diye basyıorum bu çok basitti bunu yaptım

    2.yöntem mysqlde tablo oluşturarak gelen oturum diline göre verileri diller tablosundan cekmek

    şimdi 1.yöntem daha saglıklı dediler çünki 2.yöntemde site her açılışında mysqle çok yük binermiş

    asıl sorunum şuanki sistem cok güzel fakaat bikaç şey var

    1.si bazı resimlerin dile göre değişmesi gerek bunu nasıl yapabilirim mantık ne olmalı
    2.si müşterimiz biraz farklı
    bazen menü isimlerini ve menü yerlerini sırasını değiştirmek istiyor
    veyada yeni menü eklemek istiyor
    --1.si menü ismini arrayda o php dosyasında nasıl değiştirecegim kalıcı olarak
    --2.si sıralamayı elle yapardım bunu nasıl hangi mantıkla yapmalıyım,
    --3.sü yeni menü eklemek istediginde arraya o php dosyasındaki arraya kalıcı bir değişken eklemeyi nasıl yaparım
    str_replace bu konuda işe yararmı veya bunun gibi şeyler

    3.sü anasayfada 4 tane yazı kutusu bulunuyor müşterim veritabanında yazıyı düzenler siler ekler cıkarır fakat
    dil değiştiginde bu yazılarınan müşterinin belirledigi yazılara göre değişmesi gerek tablo icine tr en de gibi sutunlar ekleyerek hepsine farklı girişini düzeltmesini silmesini saglıyorum fakat dil secimine göre mysqlden bastıramadım
    kendi yöntemime göre yaptım uzun oldu if(gelendil == tr) ise echo (yazi) dedim ama her yazıya içeriğie if ile kontrol etmek phpyi askıya alır dediler

    sırf 2 ve 3 sorudaki problemler yüzüne 2.yönteme gecmeyi düşündüm cünki ozaman sorunlar çözülüyo fakat performans konusu işte yardım edin nasıl bir mantık yürütmeliyim
     
  2. Arda Chapuler

    Arda Chapuler Üye

    Kayıt:
    13 Mart 2014
    Mesajlar:
    28
    Beğenilen Mesajlar:
    0
    yerinde olsam 2. yolu seçerdim.. daha esnek olursun.. sql ile çektiğin nesneleri cache'ye alarak cache var oldugu sürece sql yerine direk cache den okursun..
     
  3. emreuyguc

    emreuyguc Üye

    Kayıt:
    3 Mart 2014
    Mesajlar:
    41
    Beğenilen Mesajlar:
    1
    şuana kadar hiç cache ile çalışmadım sebebimde müşterim herzaman anında veri güncelleyen birisi ve bazen anında bunu görmek ister bende diyemem cacheni sil görürsün diye ama sadece dili cacheleyebilirim değilmi ayrıca cache süreside önemli galiba birde eger 2.yolu secersem baya baya bir sql kodu yazmış olacagım o yüzden :)
     
  4. YýlmazX

    YýlmazX Misafir

    ilk zamanlar SQL'e çok bulaşmak istemez, config dosyasını yeniden yazdırırdım. aynı şekilde dil dosyasını yeniden yazdırabilirsin.
    Ama şimdi aynı durumla karşılaşsam hiç bulaşmam SQL'e yüklerim :)
     
  5. pranga

    pranga Üye

    Kayıt:
    21 Şubat 2007
    Mesajlar:
    30
    Beğenilen Mesajlar:
    0
  6. Arda Chapuler

    Arda Chapuler Üye

    Kayıt:
    13 Mart 2014
    Mesajlar:
    28
    Beğenilen Mesajlar:
    0
    veri güncellendiğinde cachede tuttugun objeyi yok edersin böylece ilk girişte tekrar o obje oluşturulur.. dosyalarla boğuşmak çok zahmetli ve esnek değil eğer dosyadan okuyacagım ve esnek olsun diyorsan dil dosyalarını XML formatında tutmanı öneririm. Bu arada illaki array gibi birşeyde tutacagım diyorsan static obje yada sabitlerlerle tutmanı öneririm..
     
  7. emreuyguc

    emreuyguc Üye

    Kayıt:
    3 Mart 2014
    Mesajlar:
    41
    Beğenilen Mesajlar:
    1

    xml kullanırsam yönetici menü sırasını değiştirebilirmi öyle bir sistem yapabirmiyim

    ve aslında sqle hiç ama hiç bulaşasım yok
    sadece .php dosyasındaki bir değişkeni nasıl değiştiririm bu önemli aslında ve birde arraylarla sıralama mantıgı yani müşteri admin fotograflar köylerimiz diye menüleri admin köylerimiz fotograflarda yapmak istiyor işte orada can alıcı nokta malesef
     
  8. Arda Chapuler

    Arda Chapuler Üye

    Kayıt:
    13 Mart 2014
    Mesajlar:
    28
    Beğenilen Mesajlar:
    0
    tabiki xml en doğru çözüm ama zaman fatörünü de unutmamak lazım :) eğer panel üzerinden değişikliklere izin vereceksen mutlaka esnekliğin olmalı.. ister xml de tut ister json formatında txt dosyasında ister sql de :) ama site büyük değilse ve aktif kullanıcısı sürekli olmayacaksa sql ve cache nin pek fark yaratmayacagını düşünüyorum
     
  9. emreuyguc

    emreuyguc Üye

    Kayıt:
    3 Mart 2014
    Mesajlar:
    41
    Beğenilen Mesajlar:
    1
    çok teşekkür ederim evt şuanda aktif kullanıcısı pek olmayacak fakat ben bunun için yazdığım scripti ilerideki projelerimdede kullanacağım için sabit bir script yazmak istiyorum o yüzden

    onun için stabilize esneklik ve performansı göz önünde bulunduruyorum ve
    müşterim veya müşterilerim yönetici panelinden kelimeleri ve menü sıralarını düzenlemek istiyorlar
    bunları sqlde cok basit yapabilecegim fakat
    bütün kelimeler sqlden cekilince agır bir yük biner diye endişeliyim

    o yüzden bir dil.phpde saklamak istiyorum regex kullanarak dün bir define('anamenu','home'); buradaki home kelimesini değiştirebildim küçük bir script ile

    şimdik sizce dosya işlemi yapmakmı yoksa sqlden cekmekmi diye bir soru sorsam hangisi daha az etkileyecektir :)

    --- Ekleme ---

    Merhabalar sorunumu hem sizler hemde araştırmalarım sonucu çözüme kavuşturdum
    eğerki sizde bu çoklu dil sistemine bulaşacaksanız bilmeniz gerekeni yazayım :)


    1.Performans & Stabilizasyon :
    eğerki ilk önceliğiniz bu ise mutlaka php gettext kullanmalısınız araştırmalar ve test sonucu en iyi bunu gösteriyor
    sabit yazılar kelimeler cümleler için idealdir.yani yok ben sonradan sık sık güncellerim
    değiştirirm diyorsanız iyibir seçim olmayacak.ayrıca mesela benim gibi yönetici
    panelinden bir menu veya herhangi birşey ekleyip silecekseniz veya düzelteceksinz
    veyahut sıraya göre menu koyacaksınız veya sıraya göre başka birşey bunu kullanmanız
    iyi değildir.basit sistemler için ideal


    avantajları:
    kolay kullanım
    hızlı ve stabilize
    sabit yazılar kelimeler cümleler için idealdir sık sık kelime değiştirmeyenler için
    basit sistemler için ideal


    dezavantajları:
    gettext modulu olmayan sunucuda çalışmaz
    verileri .po dosyanızdan manuel el ile düzenlersiniz ve eklersiniz,silersiniz
    yönetim paneli gibi yerlerden erişip düzenleme yapamazsınız
    sık kelime değiştirmelerde veya yeni kelime eklemede dosyayı el ile açığ düzenleyip sora servera yüklersiniz
    ve malesef detaylı işlemler yapılamaz listeleme vs.vs.


    2.Esneklik & Erişim :
    eğerki önceliğiniz esneklik ve erişim ise yani yönetim paneli gibi biryerden yönetmek
    kelimleri düzenlemek değiştirmek silmek istiyorsanız en uygun seçim bu olmalı
    ayrıca sizlere listeleme vs diğer fonksiyonlarıda kolaylıkla sunmakta ve sık kelime değiştirmelerde
    ve dosya ile uğraşmak istemeyenler yok ben dosya açıp sora servera atmakla ugrasamam diyenlere iyi bir seçim
    kendinize bir panel yapıp herşeyi ordan yönetebilirsiniz.ancak basit sistemler için sabit kelimeler için ise
    bunu seçmek gereksiz olacaktır.detaylı işlemler için ideal


    avantajları :
    kolay kullanım
    stabilize
    erişim kolaylığı
    esneklik
    detaylı işlemler için ideal


    dezavantajları :
    diğer sistemlere göre yavaş tabiki ancak öyle ahamşaham bir yavaşlık söz konusu değil
    birazdaha fazla kod yazımı
    kullanımı zor imkansız değil
    basit sistemler için gereksiz


    3.En Uygun Seçim :
    eger basit, sabit kelimelisi , sıksık kelime değiştirilmeyen , detaylı işlemler olmayan bir sistem ise

    gettext bu sayede gereksiz veritabanı sorgusu işlemi olmayacak performanslı ve stabil olacaktır


    eğer detaylı ve performanslı sistem için ise :
    hem gettext hemde mysql kullanmak olacaktır ben şuanda buna karar verdim çok araştırma yaptım.
    çoğunluklu kullanılan ve sabit kelimeleriniz için gettext kullanın bu sayede performansı etkileyecektir
    herseferinde mysqle yük binmeyecektir.


    çoğunluklu kullanılsın veya kullanılmasın sonradan erişebileceginiz kolaylıkla dosyalarlar
    uğraşmadan değiştirmek istediginz kelimeler ve detaylı işlemler içinde
    mysql veritabanı kullanın.


    bu sayede sabit hiç değiştirmeyeceginiz kelimeler ve sık kullanılan kelimeler için sayfa her açılışında .po
    dosyasından hızlı bir şekilde verileri çekecektir.aynı zamanda kelimeler bölündüğü için tüm yük mysqle binmeyecek
    sadece gerekli kelimeleri mysqle yüklediğiniz için çok fazla kelime olup mysql yük binmeyecek ve ağırlaşma olmayacak
    bu sayede hem performans hemde detaylı işlemleri kolaylıkla yapabilecegiz

    4.Seo ve arama motoru Açısı :
    gene yaptığım araştırmalar sonucu googledanda aldıgım bilgiler sonucu :


    Kullanıcının algılanan diline göre otomatik olarak yeniden yönlendirme yapmaktan kaçının
    (yani http_Accept_encoding kullanmayın)


    Her dil için içerikleri ayrı URL'lerde tutun.
    (yani site.com/iphonone6-icin-songunler.html gibi bir dosyada farklı dil isteği bulunduğumzda aynı linke gitmesin
    yani site.com/tr/iphonone6-icin-songunler.html ingilizce icin örn. site.com/en/new-iphone6.html gibi)


    Sayfanın çevrilmiş sürümlerini göstermek için çerez kullanmayın.
    (çerez kullanılmamasını öneriyor)


    Bir sayfanın farklı dildeki sürümleri arasında çapraz bağlantılar kullanmayı düşünebilirsiniz.
    (sayfaya gelen kullanıclıar icin her dilde buton ekleyin ve kullanıcı tek tıklamayla istedigi dilde o icerigi görsün)




    **Google, sayfanızın dilini belirlemek için yalnızca sayfanızın görünür içeriğini kullanır.


    lang özellikleri gibi kod düzeyindeki dil bilgilerini kullanmayız.
    (yani site.com/lang=tr veya lang=en kullanabilirsiniz
    fakat google bunun içinde seo linkleri kullanılmasını öneriyor yani kullanıcı lang=Tr secti ise
    .htaccess ile site.com/tr/ yapmanızı şiddetle öneriyor)


    Her bir sayfada içerik ve gezinme için tek bir dil kullanarak ve orijinal metinle çeviriyi yan yana sunmaktan kaçınarak
    (bir sayfada aynı zamanda diger diller olmamasını öneriyor)


    ve herzaman site anadili olsun yani meta tag ile sitenin sabit ana dilini belirleyin yoksa yanlış indexlenmeler
    çıkıyormuş.ve googleyede site kaydı yaparken o anadili kullanın.


    bu şekilde seo ve arama motorları acısından iyi bir rank elde edebilirsiniz diyor araştırmalarım.
     
    fatih1453 bunu beğendi.
  10. fatih1453

    fatih1453 Yeni Üye

    Kayıt:
    22 Temmuz 2018
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    Selamun aleykum kardeşim epey zaman geçti ama.:)veri tabanı tablo yapın nasıl oluşturdun.baslik_tr,baslik_en gibi önermiyorlar.Sen nasıl yaptın?