none
Çoklu dil desteği

    Soru

  • Çift dil (Türkçe-İngilizce)destekli bir web sitesi hazırlıyorum veri tabanıyla ilgili kafama takılan bir kaç şey var. 

    Örneğin makaleri tutmak için  MakaleTR ve MakaleEN adında iki farklı tablo oluşturup  sayfanın dil ayarına göre makaleleri çekmeyi düşündüm  ama iki ayrı tablo olduğundan ID lerde  bir süre sonra tutarsızlıklar olacaktır diye düşündüm (Belkide yanlış düşündüm bilemiyorum) ardından da tek tabloda her iki makalenin içeriğini tutar dil ayarına göre  gerekli sutunları çekerim dedim acaba doğrumu dedim :)

    kısacası arkadaşlar  çift dil destekli bir sitenin veri tabanında nasıl bir planlama yapılmalı ? ve ne gibi ayrıntılara dikkat etmeliyim ? 

    önerilerinizi bekliyorum 

    iyi çalışmalar...


    24 Mayıs 2012 Perşembe 10:08

Yanıtlar

  • Create procedure sp_Select 

    (

    @Makale_Id int

    @Lang_No nvarchar(20)

    )as

    Select * from Makale M inner join Makale_Lang ML on ML.Makale_No=M.Makala_Id 

    Where Makale_ID=@Makale_Id and Lang_No=@Lang_No tarzında yapabilirsin.


    07 Haziran 2012 Perşembe 21:59

Tüm Yanıtlar

  • Bence tek tablo yeterli. Ote yandan bir sure sonra IDlerde neden tutarsizlik olsun. Tutarsizlik oluyorsa zaten bastan bir yanlis var demektir, tek tabloda ayni satira konmamasi gibi.

    MakaleHeader, MakaleDetail gibi bir yapi dusununce tek tabloda iki ayri alan olarak degil tek alan olarak dusunup filtrelemek kod yazimi acisindan kolaylik saglar:

    MakaleDetail: MakaleID, Dil (enum: TR/EN), Makale

    Bu ikinci tablo MakaleID, Dil ile clustered indexlenebilir, dile gore partition yapilabilir vs. En onemlisi disaridan ulasan dil tablo/alan adlariyla takla atmak zorunda kalmaz dogrudan Dil ile filtreler. Ornek:

    Guid makaleId = ...; // herhangi bir sekilde makalenin ID'si
    Dil d = Dil.Turkish;
    var makale = db.MakaleDetails
      .SingleOrDefault(mk => mk.MakaleId == makaleId && mk.Dil == d );
    
    // makale aradigin makalenin Turkcesi ya da yoksa null.
    

    24 Mayıs 2012 Perşembe 10:34
  • O iş öyle olmaz işte :) 

    Birtane Makale tablon olur birde makala_L tablon

    Makale_Tablosunda makale ile ilgli bilgileri tutarsın makale_L tablosuda aşağıdaki gibi olur.

    Makale_L_ID

    Makale_ID

    Makale_L_Icerik

    Makale_L_Baslik

    LANG_CODE (TR-EN-FR-ARAP) 

    die her makalenin içeriğini buraya kaydedersin bu şekilde yarın öbürgün fasçada makale yayınlayabilirsin.. 

    Makale Tablosunda da asıl makalenin idsi olacak herşey makale id üzeirnden ilerlicek burası önemli makale_L ye sadece makale id ve LANG_CODE ile ulaşacaksın.

    İnş düzgün anlatabilmişimdir.

    24 Mayıs 2012 Perşembe 10:56
  • Hayir duzgun anlatamadin. Neden "O iş öyle olmaz işte:)" ??? Boyle bir iddian varsa nedenini de aciklaman gerekir. Sonrasinda zaten benim soyledigimi soylemissin gibi geldi.
    24 Mayıs 2012 Perşembe 12:15
  • Hocam sözüm sana değil :) Soru sorana TR ve EN die tablo oluşturduğu için olumsuz yanıt verdim. Ben db yapısından bahsediyorum öyle olmaz derken.
    24 Mayıs 2012 Perşembe 15:10
  • Öncelikle ilginiz için teşekkür ederim.

    Sql Konusunda pek bilgili değilim  bahsettiğiniz tablo yapısını tam kavrayamadım açıkcası  daha detaylı  örnek tablo yada  bilgi edinebileceğim linkler varsa paylaşırsanız sevinirim..

    her ne kadar bahsettiğiniz tablo yapısını  tam kavrayamadıysamda kendimce biz çözüm ürettim işimi de şimdilik gördü ancak ilerde ne gibi artıları yada eksiler olur bilemiyorum  aşağıda bahsedeceğim yapıyla ilgili olumlu yada olumsuz görüşlerinizi paylaşırsanız memnun olurum...

    "Hakkında" Sayfasının içeriğini barındıran Tablom

    Dışarıya "@Dil" adında bir  Parametre göndererek   asp.net tarafında cookie deki değeri okuttum ve  gelen değere göre  Tablodan gerekli içeriği çekmesini sağladım 

    CREATE proc HakkindayaIcerikGetir
    (
    @Dil varchar(5)
    )
    as
    begin
    
    if(@Dil is null or @Dil='tr-TR' )
    select Resim,BaslikTR,IcerikTR from Hakkinda
    else if(@Dil='en-US')
    select Resim,BaslikEN,IcerikEN from Hakkinda
    
    
    end

    Sayfa tarafındaki  dil ayarım her değiştiğinde  ilgili alanların çekilmesini sağlamış oldum şu an için bir sıkıntı gözükmüyor   sizce bu mantık ne derece doğrudur?

    Aklıma takılan bir soruda  database imde birden fazla dilin  karakterlerini nasıl barındırabilirim?.

    İlginiz için tekrar teşekkür ederim ..

    İyi çalışmalar...

    27 Mayıs 2012 Pazar 19:12
  • 3. dili eklediğimizde ne olacak yeni ili alan mı eklememiz gerekiyor. Bu yapı çok gereksiz olmamış mı sizce?

    Aşağodaki yapı çok daha mantıklı duruyor bence.

    29 Mayıs 2012 Salı 13:33
  • 3. dili eklediğimizde ne olacak yeni ili alan mı eklememiz gerekiyor. Bu yapı çok gereksiz olmamış mı sizce?

    Aşağodaki yapı çok daha mantıklı duruyor bence.

    Örnek için teşekkür ederim.

    Evet benim uyguladığım yapı static bir yapı gibi.  sizin  uyguladığınız yapı daha dinamik olmuş . tabloları görünce daha iyi kavradım 

    Bu yapının Prosedurunu ne şekilde yazmalıyım ?

    29 Mayıs 2012 Salı 14:00
  • Create procedure sp_Select 

    (

    @Makale_Id int

    @Lang_No nvarchar(20)

    )as

    Select * from Makale M inner join Makale_Lang ML on ML.Makale_No=M.Makala_Id 

    Where Makale_ID=@Makale_Id and Lang_No=@Lang_No tarzında yapabilirsin.


    07 Haziran 2012 Perşembe 21:59
  • İlginiz için teşekkür ederim...

    İyi Çalışmalar

    08 Haziran 2012 Cuma 22:22