Multilang Site

35 views
Skip to first unread message

Turgay Aksu

unread,
Sep 19, 2016, 2:36:44 AM9/19/16
to Symfony 2 Turkish Users
Merhaba arkadaşlar,

Symfony ile tanışalı henüz bir ay olmadı. Açıkcası bu kadar zevkli ve bu kadar kolay olacağını tahmin etmiyordum. İstediğim her şeyi yapabiliyorum fakat, bir kaç örnek inceledim ama açıksası içinden çıkamadım.
Çoklu dil desteği olan bir sistem hazırlamalıyım. Admin'den yeni dil eklenmeli, içerik düzenlenirken de her bir dil için tab yardımıyla içeriği tek seferde güncelleme vs yaptırmalıyım. Önerilerinizi bekliyorum... :)

Teşekkürler.

Volkan Altan

unread,
Sep 19, 2016, 4:33:54 AM9/19/16
to symfon...@googlegroups.com
--

---
Bu iletiyi Google Grupları'ndaki "Symfony 2 Turkish Users" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için symfony-2-tr...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.

Osman Üngür

unread,
Sep 19, 2016, 2:26:45 PM9/19/16
to symfon...@googlegroups.com
Selamlar, kolay gelsin

Mesaji gec gordum ama aciklayabildigim kadar yanitlamaya calisayim.


Bu arada Volkan kardesim, bu linklere ortalama bir insan Google aramasi ile ulasabiliyor. Daha detayli aciklama yapmak daha iyi olur dusuncesindeyim. Katkin icin tesekkur ederim.


Sevgili Turgay

Bu konuda onemli noktalara deginelim.

On not: Symfony translation ve locale’i destekleyen bir framework. Kullanicinin locale’ini session’da tutar, locale’i set ettiginde Symfony’nin translation ve locale ilgilendiren her yerinin buna gore davranmasini saglarsin.

Birincisi sayfanin elementleri, linkler vs’in translate edilmesi. Bunu Symfony’nin kendi icindeki translation ozelligi ile halledebiliyoruz. Bunun icin yml veya xml dosyalari duzenlemek gerekiyor. En hizli ve temiz yol budur. Bunun da veritabanindan olmasini istersen suradaki yazidan faydalanabilirsin. http://blog.elendev.com/development/php/symfony/use-a-database-as-translation-provider-in-symfony-2/ 
Translationlari dosya uzerinden yaparsan bunlar symfony’de onbellekleneceginden production’da performans farki hissetmezsin. Veritabanindan olmasi performans acisindan verimsiz olacaktir. Bunu optimize etmek senin elinde. 

Ikincisi, icerigin nasil translate edilecegi konusu da senin entity’lerinin yapisina ve esneklik / tutarlilik bakis acina bagli bir durum. Volkanin bahsettigi translation calismalari esneklik acisindan maksimize edildiginden tutarlilik ve performans problemleri yaratabilir.
Eger tutarliligi tercih edersen entity’e ozel senaryolar olusturman mumkun. Yani entity’nin her alani multilanguage olmayacagindan (mesela Post::isActive gibi bir deger, Yada Product::price gibi bir alan string olmadigindan) duplication olusturur

Burada —> Entity (ornegin post) uzerinde content_EN_us, content_TR_tr, content_ES_es gibi alanlar olusturmak hos olmayan bir yaklasim oldugundan bu kisimlari one_to_many sekilde dusunmek daha iyi olur. 

Hazir cozum olarak dusunursek:

(Volkanin verdigi linkleride tek tek inceledikten sonra) suradaki https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md link senin isine en yarayabilecek yontem gibi duruyor. 

Manuel cozum olarak dusunursek: 

Iyi bir veritabani yapisi ile tutarliligin ve esnekligin en maksimize edildigi bir yaklasimi benimsemek ve bunu bir bundle’dan bagimsiz sekilde gelistirmek iyi bir deneyim olabilir. Ben bunu da oneririm. Ben genel olarak bir bundle’a bagimli kalmayi sevmiyorum. Hem ozellestirme kolay olmuyor hemde surum yukseltirken vendor lock’ta kalma ihtimali var.

Nasil bir db tablosu olmali?

Language (yeni eklenen diller buraya - id, locale)

Post (id, title, content, translations)
PostTranslation (id, locale_id, post_id, translated_value) —> (duplication’i engellemek icin kullandigin veritabaninda locale_id ile post_id yi beraber primary key olarak yap man lazim.)

Yine takilirsan yazabilirsin. Kolay gelsin.

Turgay Aksu

unread,
Sep 20, 2016, 2:22:53 AM9/20/16
to Symfony 2 Turkish Users
@Osman çok teşekkürler, istediğim mantığı oluşturmamı sağladın.

Diller için ayrı bir entity oluşturdum ->  id, title, tag, rtl
İçerikler için ayrı bir entity oluşturdum -> id (primary), lang_id(primary),  title, content vs...
One_to_many ile sessionda set edilen dile göre içerikleri çektim.

Admin kısmı için de doğru mantığı kurabilmem için bir öneride bulunabilir misin? Şöyle ki, içerik ekleme aşamasında her bir dil için tab yardımıyla ayrı birer alan oluşturup kullanıcının tek seferde içeriği girmesini sağlamak istiyorum.

Şimdiden teşekkürler.
 
19 Eylül 2016 Pazartesi 09:36:44 UTC+3 tarihinde Turgay Aksu yazdı:
Reply all
Reply to author
Forward
0 new messages