Çoklu dil desteği
-
24 Mayıs 2012 Perşembe 10:08
Ç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...
Tüm Yanıtlar
-
24 Mayıs 2012 Perşembe 10:34
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:56
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 12:15Hayir 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 15:10Hocam 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.
-
27 Mayıs 2012 Pazar 19:12
Ö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...
-
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.
-
29 Mayıs 2012 Salı 14:00
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 ?
-
07 Haziran 2012 Perşembe 21:59
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.
- Yanıt Olarak İşaretleyen Ömer Faruk ZIRHOĞLU 08 Haziran 2012 Cuma 22:22
-
08 Haziran 2012 Cuma 22:22
İlginiz için teşekkür ederim...
İyi Çalışmalar