• 07-07-2015, 22:32:35
    #1
    Merhaba arkadaşlar

    Bir soru sormak istiyorum daha önceki projelerimi yaparken dil seçeneğini olduğunda mysql veri tabanına ingilizce şekillerini de kaydetmem gerekeceğinden.. yeni bir alan adı oluşturup ingilizcesini giriyordum. Ve veritabanından çekerken de sessiona kaydetmiş olduğum dil seçeneğine göre veritabanından çekim yapıyordum.

    Örnek vermek gerekirse

    İcerikler (tablo adı)
    basliktr
    basliken
    iceriktr
    iceriken

    Sizin kullandığınız yöntemler nelerdir. En uygun nasıl yapılabilir. En kolay nasıl yapılabilir. Görüşlerinizi paylaşırsanız sevinirim.

    Son projemde ise iceriklertr ve iceriklereng şeklinde 2 tablo açmayı planlıyorum yada tüm veritabanını mı iki tane yapmalıyım veritabaniaditr - veritabaniadieng şeklinde

    Şimdiden teşekkürler
  • 08-07-2015, 00:12:35
    #2
    1. TR.php - EN.php adında iki dosya yapılır.
    2. Senin yaptığın gibi veritabanında alanlar oluşturulur yalnız şu şekilde alanbaslikTR alanbaslikEN şeklinde
    3. Getten Dil=TR - Dil=EN şeklinde parametre alınır.
    4. Veriler çekilirken alanbaslik.$_GET["dil"]; şeklinde çekilir. En uygun yöntem bence budur.
  • 09-07-2015, 09:02:30
    #3
    Bay_Keskin adlı üyeden alıntı: mesajı görüntüle
    1. TR.php - EN.php adında iki dosya yapılır.
    2. Senin yaptığın gibi veritabanında alanlar oluşturulur yalnız şu şekilde alanbaslikTR alanbaslikEN şeklinde
    3. Getten Dil=TR - Dil=EN şeklinde parametre alınır.
    4. Veriler çekilirken alanbaslik.$_GET["dil"]; şeklinde çekilir. En uygun yöntem bence budur.
    teşekkürler r10+ verdim başka fikri olan varsa bilgilendirme amacıyla yazabilir.
  • 09-07-2015, 09:12:17
    #4
    Yaptığın yazılım aşırı hit alacak bir site için mi yoksa kurumsal bir site için mi? Kurumsal bir sitede kullanacaksan normal dil çevirilerini de yönetim panelinden yaptırabilirsin. Ben bu şekilde yapıyorum.

    id - tag - tr - en - ru - ar şeklinde tablo yapım var. tag kısmına tanımladığım etiket ile session da tuttuğum dil bilgisine göre veriyi çekiyorum. Örnek içerik şekli de şöyle:

    1 - LANG_HOME - Anasayfa - Home - дома - منزل

    Menüde anasayfa yazan yere LANG_HOME etiketini yapıştırıyorum veritabanından session bilgisine göre hangi sütundan veri çekeceğini gösteriyorum.

    Bunun dışında dinamik verilerim içinde lang sütunum var. Buraya içerik türkçe ise kaydederken tr ingilizce ise en diyorum mesela. Yine buna göre çekiyorum verilerimi. Daha düzenli oluyor. Yeni dil eklediğimde sadece üstte anlattığım static çevirilere bir sütun ekliyorum. Mesela almanca dili ekleyeceğim zaman translate tablomda de sütunu oluşturuyorum. Dinamik verilerde de içerik girerken lang kısmında bu içeriğin 'de' olduğunu belirtmem yeterli oluyor.
  • 09-07-2015, 09:32:42
    #5
    evet hit alacağını düşündüğümüz herkesin kullanacağı bir site alışveriş sitesi gibi
  • 09-07-2015, 10:06:01
    #6
    Sub domainler üzerinden yada klasör üzerinden dil sistemi kurman gerekiyor o zaman.

    Google da seo için bunu öneriyor zaten [htaccess olaylarlıyla subdomain olayına falan girmeni tavsiye etmem.]

    https://support.google.com/webmasters/answer/182192

    Farklı diller için farklı mysql sunucularını birbiriyle ilişkilendirdiğin zaman işin daha kolay olacak.

    Ancak sitedeki dil kısımları stabil ise değişkenler yada dizinler ile yapman daha mantıklı bahsettiğim olay büyük veri içerikli sitelerin farklı dillere göre içerik yönetimi için geçerli.
  • 09-07-2015, 15:27:50
    #7
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Aslında çoklu dil sitelerinde veritabanı tasarımı genel olarak senin yaptığın şekilde yapılmaz, çünkü çok iş yükü ve ölçekenebilir değildir.
    En çok önerilen ve uygulanan yöntem şu şekildedir. Bir makale sitesi üzerinden örnek verecek olursak;
    Öncelikle makale sadece 1 tane olur, her dil için farklı id'li makale yaratılmaz, ki bu seo açısından da önemlidir. (one to many)

    Dinamik içerikler için:
    - makaleler (id, baslik)
    - makale_icerigi (makale_id, dil_secenegi (tr-TR, en-EN, fr-FR), baslik, ozet, aciklama, tarih, yayin_tarihi ..vs)
    (bu sistem diğer tablolar için de yapılır, senin yaptığın şekilde olursa eğer her dil için 10larca tablo açmak gerekir ve buda yine hem iş yükü hem de sonraki aşamalarda yapılacak işlemleri zorlaştırır. Örneğin bir tabloya yeni bir kolon ekleyeceksen diğer tüm dil tablolarına da eklemen gerekir. Fakat bu tasarımda 1 değişiklik her tarafı değiştirir.)

    Statik içerikler için de yine aynı yöntem kullanılabilir veya tek tablo üzerinden de gidilebilir.
    - statik_dil_tablosu (id, baslik, dil_secenegi, aciklama)
    Örn:
    Anasayfa, tr-TR, Anasayfa
    Anasayfa, en-EN, Homepage

    veya
    - statik_dil_tablosu (id, baslik) (one to many)
    - statik_dil_tablosu_aciklama (id, dil_secenegi, aciklama)
    Örn:
    1, Anasayfa
    1, tr-TR, Anasayfa
    2, en-EN, Homepage

    Her dil için klasörler veya subdomainler kullanılmaz, bu tamamen saçmalık ve iş yükü demek. Bu nedenle url routing kullanılır. Bunun yanında lang metatag'ı ile hangi dil olduğu zaten google'a bildirilir ve kullanıcı arama yaptığında arama yapılan dile ait sonuçlar çıkar.
    www.site.com/tr-TR/makale/99/makale_basligi
    www.site.com/en-EN/makale/99/makale_basligi
  • 09-07-2015, 15:40:08
    #8
    makaleler
    makale_lang

    makaleler ->
    id - makale_text
    1 - bu bir testtir

    makale_lang
    id - makale_lang_text - belong_to - language
    9 - this is sparta - 1 - EN
    8 - wakaranai - 1 - JP


    if($user->lang == "EN"){
    $makale_lang->en;
    }elseif($user->lang == "JP"){
    $makale_lang->jp;
    }else{
    $show_default_tr->makaleler;
    }


    Bu tarz bir şey yapardım heralde.Yanlış düşünmüş ya da anlamış olabilirim oruçlu olduğumdan
  • 09-07-2015, 15:55:30
    #9
    wezby adlı üyeden alıntı: mesajı görüntüle
    Sub domainler üzerinden yada klasör üzerinden dil sistemi kurman gerekiyor o zaman.

    Google da seo için bunu öneriyor zaten [htaccess olaylarlıyla subdomain olayına falan girmeni tavsiye etmem.]

    https://support.google.com/webmasters/answer/182192

    Farklı diller için farklı mysql sunucularını birbiriyle ilişkilendirdiğin zaman işin daha kolay olacak.

    Ancak sitedeki dil kısımları stabil ise değişkenler yada dizinler ile yapman daha mantıklı bahsettiğim olay büyük veri içerikli sitelerin farklı dillere göre içerik yönetimi için geçerli.
    tamamen farklı veritabanları daha mı verimli olur diyorsunuz ?

    Ama her seferinde bi ona bağlanmak bi ona bağlanmak sistemi yormaz mı acaba ?

    Kullanıcı olarak değilde yönetici olarak düşünüyorum. Alışveriş sitesi ürün eklemem gerekiyor 2 dil seçeneği var 2 sinide formdan doldurdum ve gönderdiğimde bi o veritabanına baglanacak bi o veritabanına bağlanacak zor olmaz mı ?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:55:30 -->-> Daha önceki mesaj 15:46:45 --

    rob33n adlı üyeden alıntı: mesajı görüntüle
    Aslında çoklu dil sitelerinde veritabanı tasarımı genel olarak senin yaptığın şekilde yapılmaz, çünkü çok iş yükü ve ölçekenebilir değildir.
    En çok önerilen ve uygulanan yöntem şu şekildedir. Bir makale sitesi üzerinden örnek verecek olursak;
    Öncelikle makale sadece 1 tane olur, her dil için farklı id'li makale yaratılmaz, ki bu seo açısından da önemlidir. (one to many)

    Dinamik içerikler için:
    - makaleler (id, baslik)
    - makale_icerigi (makale_id, dil_secenegi (tr-TR, en-EN, fr-FR), baslik, ozet, aciklama, tarih, yayin_tarihi ..vs)
    (bu sistem diğer tablolar için de yapılır, senin yaptığın şekilde olursa eğer her dil için 10larca tablo açmak gerekir ve buda yine hem iş yükü hem de sonraki aşamalarda yapılacak işlemleri zorlaştırır. Örneğin bir tabloya yeni bir kolon ekleyeceksen diğer tüm dil tablolarına da eklemen gerekir. Fakat bu tasarımda 1 değişiklik her tarafı değiştirir.)

    Statik içerikler için de yine aynı yöntem kullanılabilir veya tek tablo üzerinden de gidilebilir.
    - statik_dil_tablosu (id, baslik, dil_secenegi, aciklama)
    Örn:
    Anasayfa, tr-TR, Anasayfa
    Anasayfa, en-EN, Homepage

    veya
    - statik_dil_tablosu (id, baslik) (one to many)
    - statik_dil_tablosu_aciklama (id, dil_secenegi, aciklama)
    Örn:
    1, Anasayfa
    1, tr-TR, Anasayfa
    2, en-EN, Homepage

    Her dil için klasörler veya subdomainler kullanılmaz, bu tamamen saçmalık ve iş yükü demek. Bu nedenle url routing kullanılır. Bunun yanında lang metatag'ı ile hangi dil olduğu zaten google'a bildirilir ve kullanıcı arama yaptığında arama yapılan dile ait sonuçlar çıkar.
    www.site.com/tr-TR/makale/99/makale_basligi
    www.site.com/en-EN/makale/99/makale_basligi

    yazdıklarınızı 3-4 kere okudum sanırım gayet mantıklı geldi bir sonraki projede bunu deneyebilrim bi kaç birşey takıldı aklıma nasıl olaiblir diye ama sanırım uygularken onu çözmüş olurum.

    Her şekilde bu dil seçeneği ne gıcık bişey ya