Ön bilgi: çok dilli site nedir ?
Bu makalede çok dilli siteler üzerine mükemmel bir eğitici dosya oluşturmak mümkün değil : bir yandan «çok dillilik» üzerine bir çok «görüş» var; diğer yandan «en iyi yöntem»i belirlemek için elimizde yeterli veri yok.
Yani, aşağıda, SPIP’in çok dilli siteleri yönetmek için bize sunduğu farklı gereçlere bir bakış bulacaksınız; bunları kullanmak size kalmış. Bu konuda tartışmalara katılmak için bir çok seçeneğiniz var : (forumlar, wiki, tartışma listeleri vb.)
Makaleyi okumadan önce, bugünkü projenizi unutun ve şu durumları düşünün :
- temalara (başlıklara) ayrılmış bir şiir sitesi ;
- örneğin SPIP benzeri bir program için belgeleme sitesi;
- 25 dilde yayın yapan bir eğitim sitesi;
- iki dilli bir şirket sitesi;
- birkaç sayfa ingilizce içeren bir bulgar derneğinin sitesi.
Şiir sitesi daha ziyade makale makale dil seçecektir; SPIP belgeleme sitesi kendi açısından « bölge bölge » (ilk seviyedeki başlıklar) dil seçecek ve her makale için mevcut olan çevirileri sunacaktır. Eğitim sitesi 25 dili aynı anda veremeyecektir ama paralel bir yapıyı korumaya çalışacaktır. İki dilli şirket sitesi her makalenin karşısına zorunlu olarak bir çeviri koymalıdır ve iki benzer yapıyı « klonlama » yöntemiyle korumalıdır. Bulgar derneği ingilizce’yi belli bir bölüme atayacak ve geri kalan kısmı bulgarca olarak koruyacaktır (varsayılan dil).
Prensip
Bu farklı durumlara ve daha bir çoklarına izin verebilmek için SPIP’te önerilen model her makale, her ana başlık ve her kısa haber için bir dil seçmektir. Kamusal alanda, aynen özel alanda olduğu gibi bu dil, metne uygulanacak tipografik düzeltmeleri belirler; kamusal alanda SPIP tarafından «nesnelerin» etrafında kullanılacak dil de bu dildir: özellikle tarih ve formlar için.
SPIP’le çok dilli bir site kurmak için, öncelikle siteyi bu biçimde konfigüre etmek gerekir : konfigürasyonda « diller » sektöründe doğru seçim yapılmalıdır. Burad çok dillilik yönetimini aktive edebilirsiniz ve sitenizde kullanmayı düşündüğünüz dilleri belirtebilirsiniz.
Özel alanı yapılandırmak
Siteyi daha kolay işletebilmek için site konfigürasyonunda dil ayarlarının hangi incelikte uygulanacağı seçilebilir, böylece arayüzün gerekli olmadığı yerlerde maskelenmesi sağlanır ve hata olasılıkları sınırlandırılmış olur [1]. SPIP makalelere (ve kısa haberlere vb.) atanacak diller için 3 aşamalı bir arayüz sunar ; karmaşıklık sırasına göre ve basitten başlayarak :
- Sektöre göre (sektör= ilk seviyedeki ana başlık) : sitenin her sektörüne ve yayınlanan tüm makale, kısa haber ve alt-başlıkları da içeren yöneticiler tarafından değiştirilebilen bir dil karşı düşer; bu ayar basit bir yapıyı ve arayüzü koruyarak çok dilli sitelerin bir çok gereksinimine cevap verir.
- Ana başlığa göre : daha ince bir yöntem olan bu ayarla, sitenin yalnız birinci seviyesindeki değil her seviyesindeki başlıkları için dil seçilir.
- Makaleye göre : ldil, her makaleye göre de değiştirilebilir; bu seçenek öncekilerle uyumludur (her makale için dil belirlenip bazı makaleler için istisnalar uygulanabilir) ve hayâl edilebilecek bir çok esnekliğe izin verir ama anlaşılmaz yapıda bir siteyle karşı karşıya kalabilirsiniz....
Çok dilli bloklar
[SPIP 1.7.2] Yazarlar ve anahtar-sözcükler gibi bazı nesneler bağlandıkları makalenin diline göre farklı biçimde yazılabilirler. Bu arada, bir anahtar-sözcüğün «bir anahtar-sözcüğün çevrilmesi» veya «bir yazarın çevrilmesi» çünkü iki makaleyi de aynı yazar imzalamıştır ve iki makalede de aynı anahtar-sözcük yani «konsept» vardır. Bu nesneler SPIP anlamında bir dilde değildirler ama yine de «çoklu bloklar» yardımıyla çağırıldıkları bağlama göre görüğntülenmeleri sağlanabilir (daha basit açıklamak gerekirse : «Irak» anahtar-sözcüğünün eğer makael ingilizce ise «Iraq» biçiminde görüntülenmesi sağlanabilir).
«çoklu blok» yapısı oldukça basit bir SPIP kısayoludur :
<multi>zincir 1 [xx] zincir 2 [yy] zincir 3 ...</multi>
Anahtar-sözcük örneğine dönersek başlığı özel alanda şöyle olacaktır :
<multi>[fr]Irak [en]Iraq</multi>
Bir çoklu blok öngörülmeyen bir dilde görüntülenmek üzere çağrılırsa bloğun ilk bölümü görüntülenecektir (ilk örnekte «zincir 1», ikinci de «Irak»). Böylece asla boşluk görüntülenmeyecektir [2].
Dikkat: çoklu bloklar aynı yapılarıyla iskeletlerde de kullanılabilir, cf. Internationaliser les squelettes.
Döngüler ve komutlar : nasıl yapmalı
Artık özel alanı ayarladığımıza göre kamusal siteye geçebiliriz. Evet, makaleler artık zekice seçilmiş dillere sahip olsa da (yukarıda tarif ettiğimiz mekanizma ile) sitenin görüntülenmesinde iskeletler bu dilleri dikkate alabilmelidir.
1. Başlamak için iyi bir haber : iskeletlerde çokdillilik büyük oranda gayet doğal biçimde gerçekleşir ; farklı dillerdeki makalelelri görüntülemek için değişik iskeletler yapmak gerekmez. Tek bir iskelet kendi görüntülenme biçimini otomatik olarak seçilen dile adapte eder.
Böylece bir makaledeki tüm elemanlar seçilen dile dönüştürülür. Buna makalenin yayın tarihi de, bir dilekçenin imzalanma tarihi de dahildir. Daha genel olarak söylemek gerejkirse : ARTICLES
döngüsü içine yerleştirilen her SPIP komutu makalenin dilinde görüntülenecektir (bu durum ana başlıklar ve kısa haberler için de geçerlidir).
Örnek: eğer ana sayfanız son yayınlanan 10 makaleyi tarihleriyle birlikte görüntülüyorsa vietnamca yayınlananların tarihi vietnamca görüntülenecektir.
Not : bu yöntem makalenin dilinin SPIP’te mevcut olduğunu varsayar. Yani, bir makale volapück dilinde yazılmışsa ama sizin SPIP sürümünüz volapück diline henüz çevrilmediyse bu makalenin tarihi varsayılan dilde büyük olasılıkla fransızca olarak görüntülenecektir.
2. Yazının yönü
Eğer siteniz soldan sağa yazılan dillerle (dillerin çoğu) birlikte sağdan sola yazılan diller de içeriyorsa (özellikle arapça, ibranice veya farsça), HTML kodlarına küçük ekler yapılması gerekir [3].
SPIP bu konuda özel bir komut sunuyor : #LANG_DIR
dilin yazı yönünü belirtir. Bu komut dir
’e atana bir değerdir ve çoğu HTML etiketinde (soldan sağa yazılan diller için «ltr
» ve sağdan sola yazılanlar için «rtl
» pour les autres [4]).
Bu bilgiler ışığında görüntüleme döngüsü şu hale gelir :
<ul>
<BOUCLE_sommaire(ARTICLES){par date}{inverse}{0,10}>
<li dir="#LANG_DIR">[(#DATE|affdate)]:
<a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_sommaire>
</ul>
Sayfa düzeni sola veya sağa bitişik elemanlardan oluşuyorsa bunlar sağdan sola yazılan dillerde ters çevrilmeilidir : bu durumda iskeltin tüm [5] elemanlarında left
veya right
yazan komutlarının #LANG_LEFT
ve #LANG_RIGHT
ile değiştirilmesi gerekir. Sayfa tanımıyla ilgili olarak, istenen elemanın dilini ve sayfanın yazı yönünü beirtmek zekice olacaktır :
<html dir="#LANG_DIR" lang="#LANG">
<head>
...
</head>
<body>
...
</body>
</html>
3. Çeviri bağlantıları
SPIP makaleler arası çeviri sistemi önerir : bir makalenin hangi çevirilerinin hangileri olacağı belirtilebilir (not : bu çeviriler de ayrı birer makaledir). {traduction}
kriteri ARTICLES
döngüsü içinde, aynı makalenin tüm çevirilerini bulur.
Örneğin, o anda açık olan makalenin tüm çevirileri için :
<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traductions>
{exclus}
kriteri o anki sürümün görüntülenmesini önler ve |traduire_nom_langue
filtresi bilgisayar kodundan yola çıkarak gerçek dili bulur (bu yöntemle «fr
» yerine « français » , «en
» yerine «English» görüntülenmesini sağlar).
- {origine_traduction}
ek kriteri de (ileri düjey programcılar için) makalenin sadece « orijinal sürümünü » görüntüler.
spip-contrib"’in wiki sayfası bu kriterleri içeren döngü örnekleri içerir : http://www.spip-contrib.net/-Carnet....
4. Yardımcı elemanlar
[SPIP 1.7.2] çok dilli siteleri oluşturmaya olanak tanıyan bir sürü eleman sunar :
— {lang_select}
kriteri normal olarak bu işi yapmayan (AUTEURS) döngüsünü bir dil seçmeye zorlar (tersine, {lang_select=non}
kriiteri de (ARTICLES), (RUBRIQUES) ve (BREVES) döngülerine dil seçmemelerini söyler).
— $forcer_lang
kişiselleştirme değişkeni SPIP’e ziyaretçinin bir dil kurabiyesine sahip olup olmadığını kontrol etmesini ve eğer sahipse ilgili sayfaya göndermesini söyler. SPIP’in özel alana bağlanma sayfasının standart olarak yaptığı şey tam da budur.
— #MENU_LANG
(ve #MENU_LANG_ECRIRE
) komutları kullanıcıya bir dil menüsü görüntüler ve «bu sayfa ... dilindedir» biçiminde seçim yapmasına olanak tanır. İlk komut sitedeki dilleri listeler; ikincisi özel alandaki dilleri isteler (özel alana bağlanma sayfasında kullanılır).
— son olarak, (cf. SPIP 1.7, SPIP 1.7.2) seçimlik kriterleri ister sitedeki bütün dillerdeki tüm makaleleri görüntülemek için ister URL ile geçirilen dildeki tüm makaleleri görüntülemek için aynı döngüyü kullanma olanağı tanır (aslında, aynı iskelet). Bu, örneğin backend’lerde veya arama döngülerinde oldukça kullanışlıdır :
<BOUCLE_recents(ARTICLES){lang?}{par date}{inverse}{0,10}>
<BOUCLE_recherche(ARTICLES){lang?}{recherche}{par points}{inverse}{0,10}>
Yoğun çok dilli bir site için uluslararası iskeletler
Önceki anlatılanlar bize iskeletimizin sadece SPIP içeren bölümlerini çok-dilli hale getirme olanağı tanıdı : döngülerden elde edilen tüm veriler doğru yönde, doğru tipografiyle görüntülenir ve SPIP tarafından üretilen elemanlar (formlar, tarihler) istenen dildedir.
Az sayıda dil içeren siteler için (örneğin iki dilli) veya bir ana dilin ve bazı ek dillerin bulunduğu siteler için bu yeterli olabilirdi. İskeletlerdeki sabit metinler yani direkt olarak HTML’de yazılmış olan « Site planı », « Yazım alanı », « Bu mesajı cevaplayın » türünden metinler tek bir dilde olabilirler; veya iki dilli bir site her iki dil için ayrı iskeletler kullanabilir.
Bu arada, çok-dilli bir site idare etmek isterseniz ayrı iskeletler bulundurmak veya tek bir dilde gezintiyi zorunlu kılmak (bu dil ingilizce veya esperanto olsa bile) hayalî bir durumdur. Her dilde çalışan tek bir iskelet takımı oluşturmak için iskeletleri uluslararasılaştırmak gerekir böylece kendilerini içeren HTML’den bağımsız olarak metinler değiştirilebilir (HTML dilden bağımsız olarak sabit kalacaktır). Bu görev « ellerimizi taşın altına koymamızı » gerektirir ve ayrı bir makalenin konusudur.
Ek detaylar
- <code> ve <cadre> tipografik kısayolları, makalenin dili sağdan sola doğru olsa bile daima soldan sağa yazılan bi rmetin oluşturur. Aslında bu iki kısayol çoğunlukla soldan sağa doğru yazılan bilgisayar verilerini görüntülemeye yöneliktir (ve çoğunlukla batı kakarterlerini kullanır).
- Yazım yönü konusunda HTML’in left
ve right
niteliklerinin stil sayfalarında da sıkça karşımıza çıktığını hatırlatalım. Bu demektir ki iskeletlerinizde #LANG_LEFT
ve #LANG_RIGHT
komutlarını kullanmak için onları ayrı bir dosyada tutmak yerine stil sayfasının ilgili kısmını katıştırmak zorunda kalabilirsiniz.
İşte size SPIP komutlarının yazı yönüyle ilgili davranışlarına bir örnek:
Langue | #LANG_LEFT | #LANG_RIGHT | #LANG_DIR |
---|---|---|---|
soldan sağa yazılan diller | left | right | ltr |
arabe,farsi,hébreu... | right | left | rtl |
- Un filtre |direction_css
permet d’« inverser » un fichier CSS pour les langues s’écrivant de droite à gauche. Si la feuille de style CSS à inverser s’appelle par exemple style.css, ce filtre utilise (dans le cas où la langue courante s’écrit de droite à gauche) une éventuelle feuille style_rtl.css ; si celle-ci n’existe pas, il crée automatiquement une feuille RTL en remplaçant toutes les occurrences de left par right et vice-versa (et la stocke dans le répertoire IMG/cache-css/). Il s’applique le plus souvent sur une balise #CHEMIN
, de cette façon : [(#CHEMIN{style.css}|direction_css)]
.
- |direction_css
filtresi, sağdan sola yazılan diller için CSS dosyasını « tersine çevirmeye » olanak tanır. Eğer tersine çevrilecek CSS dosyasının ismi style.css ise bu filtre (aktif dilin sağdan sola yazılması durumunda) büyük olasılıkla style_rtl.css dosyasını kullanacaktır; eğer bu dosya mevcut değilse otomatik olarak bir RTL dosya oluşturacak ve tüm left’leri right ile değiştirecektir veya tam tersini yapacaktır ve IMG/cache-css/ dizinine kaydedecektir. Genelikle #CHEMIN
türünden bir komuta şu biçimde uygulanır : [(#CHEMIN{style.css}|direction_css)]
.