Merhabalar Asp.net üzerinde bir proje geliştiriyorum.Site içindeki bazı verileri veritabanından alıyorum ve sitenin çok dilli olması gerekiyor.Bunun normal site içindeki yazıları İngilizceye çevirdiğim gibi çevirebileceğim bir yolu var mıdır ?

soruldu: 24 Ara '15, 08:27

stoler's gravatar image

stoler
36111113
cevap kabul oranı: 0%


Ben bu problem için daha önce translations tablolarının oluşturulduğu bir çözüm uygulamıştım. Kolay anlaşılması için örnek üzerinden anlatayım. Örneğin, film bilgilerinin tutulduğu bir veritabanı oluşturucağımızı düşünelim. Bunun için en üstte Movie isimli bir tablomuz olucak, onun altında MovieTranslations şeklinde bir tablo olucak ve aynı zamanda bütün site için geçerli olucak bir Language tablosu bulunucak ve sitenin desteklediği diller bu tabloda bulunucak. Movie tablosunda movie için "translate" edilmiycek alanlar tutulucak. Translate edilicek alanlar ise MovieTranslations tablosunda tutulucak. Sitenin desteklediği diller ise Language tablosunda tutulucak. Yani ER diagramı aşağıdaki gibi olması lazım.

Er Diagram

Language tablomuzda Id:1 Name:"İngilizce" Code:"En", Id:2 Name:"Türkçe" Code:"Tr" satırlarının olduğunu düşünelim. Örneğin bu tabloya "Undisputed 1" isimli filmi ekliyicez. O zaman şöyle bir sql sorgusu yazılması gerekiyor.

INSERT INTO Movie VALUES('5','2002','Undisputed 1');
INSERT INTO MovieTranslations('MovieName','Type','MovieId','LanguageId') VALUES('Undisputed 1','Action,Crime,Drama','5','1');
INSERT INTO MovieTranslations('MovieName','Type','MovieId','LanguageId') VALUES('Yenilmez 1','Aksiyon,Suç,Drama','5','2');

Örneğin filmin türkçe bilgilerini almak istiyorsun. Böyle bir design için Select sorgusu da şöyle olur.

SELECT mt.MovieName, mt.Type
FROM MovieTranslations AS mt
     JOIN Movie AS m ON Movie.Id = MovieTranslations.MovieId
    JOIN Language AS l ON MovieTranslations.LanguageId = Language.Id
WHERE OriginalName = 'Undisputed 1' and  l.Code = 'Tr';

Dezavantajları:

  • Joinlerin artması
  • CRUD(Insert, Update vb.) işlemlerinin karmaşıklaşması
  • Tablo sayısının artması

Avantajları :

  • "Cost Of Change"'in düşük olması. Diğer bir deyişle hiç birşeyi silmeden veya değiştirmeden sınırsız dil desteği eklenebilir.
  • Dizaynın dinamik olması.
  • Kolay devam ettirilebilir(Maintenance) olması
permanent link

cevaplandı: 25 Ara '15, 08:30

ArnesTwin's gravatar image

ArnesTwin
1.1k1511
cevap kabul oranı: 14%

2

Bunun için her seferinde db'ye gitmek büyük yük getirir.. Ama db'den bir kere bu tabloyu alıp, cache içine doldurursan oldukça iyi olabilir ;)

(25 Ara '15, 14:14) Turgay Can Turgay%20Can's gravatar image
1

Dediginiz sey duruma gore degisir. Eger sadece statik alanlarin textlerini doldurucaksa 1 kere alip cachelemesi güzel olur ama ornegin 2005 ten sonra cikan filmlerin bilgilerini turkce olarak getir der ise o zaman cachelemek ekstra maliyet gerektiricektir. O yuzden sadece temel yontemi soyledim nasil optimize edilicegi developera kalmis :)

(26 Ara '15, 02:31) ArnesTwin ArnesTwin's gravatar image

Cevaplarınız ve yorumlarınız için teşekkür ederim bir tür e-ticaret sitesi üzerinde deneyeceğim bunu veri miktarı çok fazla olmadığı için cache içine doldurmak sanki daha kullanışlı gibi geliyor

(26 Ara '15, 14:48) stoler stoler's gravatar image

Daha önce bulunduğum projelerde çoklu dil deçeneği için, her dile ait bir tr_messages,en_messages diye properties dosyaları vardı ordan çekerdik, bu veriler için değil ekrandaki statik buton,link sayfa menu ,acıklama isimleri içindi, fakat veriler için böyle bir şey yapılamaz tabi, bunun için, verilerinin bulunduğu tabloda language kolonu bulundurup aynı verinin her dil için eklenmesi gerekir, dolayısıyla veriyi sayfa diline göre çektğinde dil kodunu parametre olarak geçirip alabilirsin, .net yazmadığım için pratik bir yolu var mı bilmiyorum sadece genel teorisinden bahsetmek istedim

permanent link

cevaplandı: 25 Ara '15, 01:50

ibrahim472's gravatar image

ibrahim472
1.9k1614
cevap kabul oranı: 10%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×81

Soruldu: 24 Ara '15, 08:27

Görüntüleme: 455 kez

Son güncelleme: 26 Ara '15, 14:48

powered by BitNami OSQA