|
|
#1 (permalink) |
|
Çoklu dil desteği sağlayan web sitesi programlamak
Herkese merhaba, Bir web sitesi projesi için aklıma takılan bazı sorular var. Yapmayı düşündüğüm web sitesi kullanıcılara birden fazla dil seçeneği sunacak. Yaptığım araştırmalardan, en mantıklı çözümün , tüm metinlerin aynı veritabanında tutulması... Bir örnek vermek gerekirse, site ilk açıldığında sağlanan dil desteklerinin linkleri olacak. Buradan hangi dile tıklanıldığı takdirde, istenilen dizine yönlendirilecek( siteadi.com/en, siteadi.com/tr, siteadi.com/it gibi... ) Aklımdan geçen veritabanı modellemesi ise şöyle: Makaleler --------------- MakaleID KategoriID MakaleBaslikTR MakaleBaslikEN MakaleBaslikIT MakaleTR MakaleEN MakaleIT gibi..... Kullanacağım veritabanı MSSQL olacak. Ancak veritabanına kaydedilen metinin karekterleri herhangibir problem oluştururmu... Mesela rusça yada fransızca karakterler? Böyle bir site için dikkat edilmesi gereken hususlar nelerdir? Yardımcı olursanız sevinirim. Teşekkürler... |
|
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,973
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
text alanları nvarchar yada ntext olarak belirtirseniz unicode karakterlerde bir sorun yaşamazsınız.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
#3 (permalink) |
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
Veritabanı mantığın şu şekilde olmalı bence;
1. Makaleler; a_id (INT) (PK) c_id (INT) (FK) a_active (ENUM; true,false) 2. Kategoriler; c_id (INT) (PK) c_parent_id (INT) (FK) c_active (ENUM; true,false) 3. Dil seçenekleri; l_id (INT) (PK) i_id (INT) (FK) l_content (TEXT) l_type (ENUM, c_title, c_description, a_title, a_content,.....) l_language (ENUM; tr, en, de, fr, it, .....) Burada 1. makaleler tablosunda ve 2. kategoriler tablosunda gördüğün gibi içerikle ilgili bir alan yer almıyor. Örneğin bir makale ve kategori kaydı sadece şu verileri içerir; Kod:
1. Makaleler; a_id | c_id | a_status 222 333 active 2. Kategori; c_id | c_parent_id | c_status 333 0 active 3. Dil seçenekleri; l_id | i_id | l_content | l_type | l_language 99 333 Kategori adı c_title tr 100 333 Category name c_title en 101 222 Makale adı a_title tr 102 222 Article name a_title en 103 222 Makale içeriği a_content tr 104 222 Article content a_content en Umarım anlatabilmişimdir
__________________
onurkose.com Mesaj nothingrows tarafından 25.12.2006 (14:28) yeniden düzenlendi. |
|
|
|
|
|
|
#4 (permalink) |
|
Üyelik Tarihi: 16.12.2006
Yer: istanbul
Yaş: 26
Mesaj: 484
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
Bu biraz karışık geldi bana. Örneğin tek bir makale için şöyle verilerimiz var;
Kategori: Yemek (kategori tablosundan ID=6) Makale Adı(TR): Yumurta Kırma Sanatı Makale Adı(EN): Cooking Egg Art Makale Adı(IT): Importante Gepassa Makalenin kendisi(TR): İlk adım yumurtaları seçmeliyiz… Makalenin kendisi(EN): First step to choosing the eggs… Makalenin kendisi(IT): Egosso florentina mammamia… Bunu senin söylediğin sistemde kaç tablo ve tablo satırı kullanarak yapacağız? Arkadaşın dediği formatta sadece tek tablo ve SQL'deki SELECT sorgusunda gibi bir sorgu ile tek seferde sadece istediğimiz veriyi alabiliyoruz.. ($lang doğal olarak "TR", "EN" gibi bir değişken.) Hatta tabloda boş kalan dil içeriği de herhangi bir yer meşgul etmiyor.
__________________
Spoiler:
|
|
|
|
|
|
#5 (permalink) |
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
Tabiki karışık olmalı
![]() Şimdi bu gibi sistemleri şöyle ele almak gerekiyor; eğer bir web sitesini çok dilli tasarlayacaksanız ve çokun karşılığı size Türkçe ve İngilizce olarak kesin bir ifade ile belirtiliyorsa, evet @s3prin'in belirttiği gibi tek bir sorguda bunu halledebilirsin. Fakat "sen hele Türkçe ve İngilizce olarak yapta, ileride tekrar bakarız" şeklinde bir müşteri ifadesi karşısında ise böyle bir veritabanı yapısı kullanmak aptallık olur. Çünkü yarın bir gün vatandaş "Fransaya'da ihracata başladık, aha bu tercüman aha bu da para" dediğinde ise sen tablolarına (makaleler, kategoriler, ürünler... vs.) sonu fr ile biten birer sütun daha eklersin. Geniş düşünmek her zaman daha fazla zaman ve emek tasarrufu sağlar. Tarif ettiğim yapıda bir içerik için sınırsız tercüme imkanı var. Tek yapman gereken 3. Dil seçenekleri adıyla belirttiğim tabloya eklemek istediğin içeriği ekleyip l_language alanına hangi dilde olduğu girmek. Bir de, mesele tek SQL ise; Kod:
$sql_query = "SELECT * FROM `articles` a, `lang_base` l WHERE ( a.`a_id` = 222 AND a.`a_status` = 'active' ) AND ( l.`i_id` = 222 AND l.`l_language` = '$lang' AND l.`l_type` = 'a_content' );
__________________
onurkose.com |
|
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 14.12.2006
Yer: Trondheim
Mesaj: 45
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
Benim sitede kullandığım çok dil yöntemi şu şekilde, öncelikle sabit veriler için ayrı bir düzenek sürekli artan veriler için bi düzenek oluşturmalısın mesela sabit olanlardan kastım sitede bulunan buton isimleri hata mesajları vs onun için oluşturduğum tablo şu şekilde,
deger turkce ingilizce norsk --------------------------------------------------------- CIKIS Çıkış Exit Utgang ILERI İleri Forward Frem GERI Geri Back Rygg bunları fonksyionla istenilen bölgeden çağırıp gerekli alana yazdırabiliyorsun <%=DilGetir("CIKIS",Session("DIL"))%> gibi, eğer siteye yeni bir dil eklenecekse yeni bir stun ekleyip karşılıklarınıda dilde doldurabiliyorsun. dinamik veriler içinse örneğin haber kısmı tabloya sadece dil stunu eklemen yeterli kayıt ederken dil stununa seçilen dil ID si eklenir sitedede ona göre gösterim yapılır, site içerisinde dil seçimini Sessionla yaparsın ben dilleri sayı olarak kullanıyorum 0=turkce 1=ingilizce vs hangi dili seçmişse sabit veriler Sessiondaki ID kolonundaki verileri çeker sayfalardada haberlerin sadece Sessiondaki ID'ye göre gelir, her tablo içine haber_tr, haber_ing vs gibi stunlar oluşturmaktansa ID yöntemi daha mantıklı olur gibime geliyor eğer programlama dilinin dinamik faydalarından yararlanmak isteniyorsa çünkü oldu ya yeni bir dil daha eklenmek istenebilir 300binlik bir makale arşivi düşünün ve ispanyolca stunu eklediniz hepsinin karşılığı boş çıkacaktır. |
|
|
|
|
|
#7 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,973
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
eklemeyi unutmuşum, ilk mesajdaki yapıda yeni bir dil eklemeniz, tüm tablolarınızı elden geçirmeniz anlamına gelir. @nothingrows'un verdiği yapıda ise dil seçenekleri tablosuna kayıt eklemeniz (kategori için bir, yeni dilde yayınlanacak her makale için ise birer adet) yeterli olacaktır.
l_content alanının ntext yapılması unicode karakterler için çözüm oluşturacak, ENUM ile verilen alanların yeni bir tabloda tutulup bağlantı kurulması, ilişikisel veritabanı mantığına uygun şekilde olmasını sağlayacaktır. biraz daha derli toplu hali eklerde görülebilir. article tablosundaki p_id ALLOW NULL olup, parent_id yi belirtmektedir. yeniden düzenlemeye vaktim olmadı. not: @nothingrows, farklı olarak kategori ve makaleleri 2 tablo yapmaya gerek yokturi zaten ikisinin de parent'i vardır, parent'i NULL olan kayıtlar en üstteki kategorileri ifade eder.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com Mesaj absconder tarafından 26.12.2006 (10:12) yeniden düzenlendi. |
|
|
|
|
|
#8 (permalink) | |
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
@absconder, aslında benim yukarıda verdiğim örnekte iki şeyi açıklamayı unutmuşum. Birincisi ben burdaki kategori (c_id, c_parent_id) yapısını, sınırsız ağaç yapısı şeklinde kullanmak üzere oluşturmuştum (bkz. mutasyon.net en altta not olarak). zamanla bunu javascripte ve sorna PHP'ye aktardım (bkz. nothingrows.net). Böylece üst kategori - alt kategori mantığını sonsuza kadar devam ettirebiliyorsunuz ve tabiki burda da c_parent_id değeri 0 olanlar en üst kategorileri oluşturuyor.
İkinci konu ise şu şekilde; yine verdiğim örnekte makaleler tablosunu açıklarken bir c_id, yani makalenin ait olduğu kategori numarası yer alıyor. Ben bunu kendi sitemde böyle kullanmadım. Makale ve Kategori eşlemesini yapacak üçüncü bir index tablosu oluşturdum ve burada sadece iki sütuna yer verdim. Birisi a_id ve diğer c_id. Yani hangi makale, hangi kategoriye ait ise her satırda ikisinin id numaralarını giriyorum. Böylece bir makaleyi birden çok kategori altına ekleyebiliyorum. @Komplo'nun merak ettiği asıl meseleden biraz uzaklaştık ama sanırım onun ve diğer arkadaşlar için faydalı bilgiler verebilmişizdir. Not: Alıntı:
__________________
onurkose.com |
||
|
|
|
|
|
#9 (permalink) |
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
@absconder
Söylediklerine göre metinsel tüm değişkenleri (kategoriad, metinbaslik, metin vs.) ntext olarak belirlemem gerekiyor. Bu şekilde metin Arapça dahi olsa sanırım bir problem oluşmayacak. @nothingrows Cevapların için sağol. Beni büyük bir hatadan dönderdin. Sonradan dil eklenmesini olayını atlamıştım. Ama yinede önerilerinin bazı noktalarını çözemedim. Söylediklerinizden yola çıkarak benimde basitçe hazırladığım bir örnek var. Burada 3 adet tablo var. Diller, Kategoriler, Metinler diye… Diller ------ DilID Dil Kategoriler ------------ KategoriID DilID KategoriAd Metinler --------- MetinID KategoriID MetinBaslik Metin Şu anki durumda yanlış bir şey yok gibi. Birkaç veri ekledim ve altta da ekran görüntüsünü bulunmakta… site içeriği x şehrini anlatan bir yapıda olacak. Camiler, kiliseler, müzeler vs. gibi kategorileri olacak. Bu kategoriye bağlı tarihi eserlerinde tanıtımı yapılacak… Vakit ayırıp , cevap verenler için teşekkür ederim… |
|
|
|
|
|
|
#10 (permalink) |
|
Üyelik Tarihi: 16.12.2006
Yer: istanbul
Yaş: 26
Mesaj: 484
|
Re: Çoklu dil desteği sağlayan web sitesi programlamak
Nerden açtınız bu konuyu? Ne gerek vardı sanki ne güzel muntazam bir şekilde tablolara her dil için 1'er tane field ekleyip yolumuza devam ediyorduk
![]() Şaka bir yana; @Komplo 3 gün boyunca bekledim ve "şurayı söyle yapsan" tarzı bir cevap gelmediği için sanırım tablo yapın uygulanabilir durumda. Böylelikle ben de şu an üzerinde çalıştığım bir yapıya ilişkin çoklu dil sorularıma geçiyorum izninle. Öncelikle dil tablomuz: l_id ; Code ; Lang_EN ; Lang_LO "1" ; "en" ; "English" ; "English" "2" ; "tr" ; "Turkish" ; "Türkçe" ... Ve kolaydan başlıyorum; elimizde 1 adet meslekler tablosu var. Kullanıcıya < select > şeklinde gösterilecek: oc_id ; Occupation "1" ; "Academic" "2" ; "Accounting" "3" ; "Advertisement" "4" ; "Arcitect" "5" ; "Artist" .. Bunu en basit şekliyle (diyeceğim ama aklıma TR, FR gibi field'ler eklemek geliyor yine) nasıl çoklu dil haline çevirebiliriz? (aşure yapmadan )1. soru için şimdiden teşekkürler.
__________________
Spoiler:
|
|
|
|
| Sponsorlu Bağlantılar | |
|
Zoque.Forum
Reklam
|
|
![]() |
| Etiketler |
|
programlamak , sitesi , web , saglayan , destegi , dil , coklu |
|
|
Zoque'a hoşgeldiniz!