Yönlülük desteği
Farklı yazma yönler (soldan sağa, sağdan sola) desteği çok dilli yazılımlar için önemli bir husustur. MediaWiki 1.18 beri, destek önemli ölçüde geliştirildi.
Bu sayfa, sağdan sola arabirim ve genel olarak farklı yönlülük ile uyumlu bir özellik veya uzantı oluşturmak istiyorsanız, geliştiriciler ve wiki yöneticileri için bazı alakalı bilgiler ve yönergeler sağlar.
Kullanıcı düzeyinde ipuçları
Geliştiriciler için ayrıntılara ulaşmadan önce kullanıcılar için bazı genel ipuçları:
- Çoğu tarayıcı, madde arama kutuları, viki sözdizimi düzenleme, düzenleme özeti vb. gibi düz metin düzenleme alanının yönünü değiştirmeyi destekler. Tarayıcılara ve işletim sistemlerine bağlı olarak, bu Ctrl+⇧ Shift (Windows'ta Chrome ve IE), Ctrl+⇧ Shift+X (Firefox), Option-Click-Change yönü (Mac) tarafından yapılır. Bu, sitenin normal yönünden farklı bir yönde yazmanıza yardımcı olacaktır.
- Siteninkinden farklı bir yöne sahip bir dilde bir bölüm yazarken, uygun dil, dir ve sınıf niteliklerine sahip bir div etiketi ekleyin. Örneğin, Arapça Vikipedi'yi İngilizce bir bölüm yazarken, başında
<div lang="en" dir="ltr" class="mw-content-ltr">
ve sonunda</div>
yazın. - Bir paragrafın içine sadece birkaç kelime yazarken, bunları uygun dil ve dir özelliklerine sahip
<span>
bir etikete koyun. (Birçok vikide bunun için bir şablon vardır, örneğin {{lang}}). - Komşu bir kelimeden farklı yönlülükteki sayıları ayırmak için RLM veya LRM karakterlerini kullanın. Birçok vikide bunun için şablonlar vardır, örneğin İbranice Vikipedi'de {{כ}}, Arapça Vikipedi'de {{RLM}}, Farsça Vikipedi'de {{رچ}}, vb. Bir şablon kullanılabilir olduğunda, genellikle Unicode karakterinin kendisinin kullanılması tercih edilir.
RTL etiketini kullanarak, MediaWiki ile ilgili herhangi bir projede Phabricator'daki RTL işlemedeki hataları bildirebilirsiniz.
ResourceLoader
CSSJanus dahil ResourceLoader sayesinde, kullanıcı dili RTL olduğunda CSS otomatik olarak sağdan sola çevrilir. Bu, 1.18 bu yana varsayılan değerdir (önceki sürümlerde viki içerik diline bağlı). İçerik diline bağlı olması gereken nispeten az CSS vardır.
- Dikkat: ResourceLoader haya ayıklama modu kullanırken, CSS üretim moduna kıyasla tutarsız bir şekilde görüntülenebilir. Geçici bir geçici çözüm olarak hata ayıklama kapalı RTL arabirimi olarak. (Sorun Phabricator:T29025 olarak takip ediliyor.)
Ne tür diller?
Ana madde: Manual:Language
- $wgLang - kullanıcı dili (ve ilgili yön)
- $wgContLang - site içerik dili (ve ilgili yön) -> burada LTR
- Title->getPageLanguage() - sayfa içerik dili (ve ilgili yön) -> varsayılan olarak site içerik diliyle aynı
- Bazı varsayılan istisnalar vardır: aşağıya bakın
- PageContentLanguage kanca ile uzantıları ayarlanabilir
- Bu, İçindekiler'i (ve çok fazla alakalı olmasa da dilbilgisi gibi şeyler) bu dile ayarlar. Yalnızca bunu yapmak için parserOptions->setTargetLanguage() kullanın
- 1.17 ile uyumlu kalması gereken uzantılarda wfUILang() kullanabilirsiniz, ancak bu 1.16 ve daha düşük sürümlerle uyumluluğu bozar. Bu, 1,18'de $wgLang ve daha yüksek, ancak 1,17'de $wgContLang (varsayılan olarak) döndürür.
Ne tür bir izlemeli?
- Özel sayfalar varsayılan olarak kullanıcı dilini takip eder.
- Kaynak kodu İngilizce olmalıdır (CSS/JS sayfaları varsayılan olarak İngilizce olarak ayarlanmıştır).
- Çevrilmiş alt sayfaları olan sayfalar çevirinin dilini izlemelidir (ör. "Sayfa" wgContLang, "Sayfa/he" "he"'dir). Bu, MediaWiki ad alanı için varsayılan değerdir.
- Giriş kutuları ve textareas varsayılan olarak içerik yönünü izler.
- Farkı görüntülerken, kullanıcı dilini takip eder, ancak gerçek fark metni sayfa içerik dilinde bulunur.
Kaynak koduna ne eklemeliyim?
- Özel sayfalarda kullanıcı dilinden farklı olan her şeyin bir
<div dir="..." lang="...">
etiketi olmalıdır.- Örnek: viki içerik dilinde "recentchangestext" iletisini ekleyen SpecialRecentchanges->setTopText().
- Özel ad alanlarındaki, varsayılan wiki içeriğinden farklı metin içeren her şeyin bir
div
etiketi de olmalıdır.
- Fark metni sayfa içerik diliyle aynı değilse, $diff komutunu kullanın; burada $diff bir DifferenceEngine nesnesidir.
lang/dir özellikleri
HTML kullanmalısınız:
Xml::rawElement( 'div', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() );
ancak bazen dinamik olarak oluşturulmuş öğelerde bu zordur ve CSS'ye geri dönebilirsiniz:
.class { direction: ltr; }
Viki içeriği
MediaWiki sürümü: | ≥ 1.18 |
Bu bölüme göre düzenleme bölümü bağlantılarını ve ul/ol öğelerini kullanmak için mw-content-ltr
ve mw-content-rtl
sınıflarını kullanabilirsiniz.
- Örneğin
Xml::rawElement( 'div', array(
'class' => 'mw-content-' . $wgLang->getDir(),
'lang' => $wgLang->getCode(),
'dir' => $wgLang->getDir(),
'Text'
);
Bu elbette maddelerin sayfa içeriği için kullanılır.
- Dosya sayfalarında, yalnızca gerçek metnin etrafına dosya sayfasının geri kalanı özel kullanıcı arayüzü (dosya geçmişi, ...) eklenir.
- Kategori sayfalarına normal sayfalardaki gibi eklenir, ancak kullanıcı dilindeki metin
lang
vedir
niteliklerine sahip birdiv
içine yerleştirilir kullanıcı diline göredir.
- Özel sayfalara eklenmez, çünkü bunlar büyük ölçüde kullanıcı dilindedir. Özel sayfalardaki bir metin, daha sonra bu sınıflara gömülmesi gereken içerik dilinde olabilir. Örneğin, kod özeti ve kod açıklamaları için CodeReview uzantısında, viki içerik dilinde ul/ol öğeleri (* ve # vikimetin) içerebilen ve ilke olarak kullanıcı dilini açıkça kullanamayacak şekilde kullanılır.
Bu sınıflara UI öğesi eklemek yapılmamalıdır. Örneğin, kategori bağlantıları ve FlaggedRevs inceleme formu #bodyContent içinde ancak .mw-content-ltr/rtl dışında.
Ayrıca bakınız: Kimlikler ve sınıflar.
gövde sınıfları
Gövde etiketi, varsayılan olarak kullanıcı dilini izleyen bir ltr
veya rtl
sınıfına sahiptir.
Bunu kullanmamalısınız, çünkü CSS kullanıcı diline göre otomatik olarak çevrilir.
Gövde etiketi ayrıca $wgContLang->getDir()
takip eden yeni (1.18) sitedir-ltr
ve sitedir-rtl
sınıfına sahiptir.
Buna ihtiyaç varsa, bir "userlang-ltr/rtl" ve/veya "pagelang-ltr/rtl" de eklenebilir.
float/text-align
Uygun 'right' veya 'left' değerleri veren $wgLang->alignStart()
, $wgContLang->alignStart()
, $wgLang->alignEnd()
, $wgContLang->alignEnd()
kullanabilirsiniz.
RTL arayüz dilleri için değeri (sol/sağ) çevrilen CSS float
veya text-align
kullanabilirsiniz.
Örnekler
Special:AllMessages özel bir sayfadır, yani kullanıcı dili yönünü izler. Ancak, gerçek mesajlar seçilen dilin yönünü izlemelidir.
- Special:Allmessages = İngilizce, LTR
- Special:Allmessages/he = İbranice, RTL
Tablodaki iletilerin içeriğini içeren hücrelerin lang
ve dir
özniteliği vardır.
PageContentLanguage kancasını kullanan Translate uzantısı, çevrilmiş sayfalar için doğru dili (ve dolayısıyla yönü) ayarlar, ör. meta:Wikimedia_maintenance_notice/ar bir LTR viki üzerindeki mw-content-rtl sınıfından yararlanır.
Yerel vikiler
MediaWiki:Common.css sayfaları ve akrabaları da çevrilir. Bu, gerektiğinde @noflip eklemeniz gerektiği anlamına gelir.
T33923 bakın: site CSS'si varsayılan olarak çevrilmemelidir.
Sorunlar
- Çoğu büyük özellik ve uzantı, yaklaşık 1.19'dan bu yana geliştirilmiş bir desteğe sahiptir, bunun için translatewiki:Project:Better directionality and i18n development bakın.
- Bilinen kalan sorunlar:
- Harici bağlantı simgeleri kullanıcı dilinin yönüne göre çevrilir (küçük sorun)
- LiquidThreads -
pagelang
yerinecontlang
kullanın, aksi takdirde özel sayfauserlang
döndürür - WikiLove - sola hizalanmış yavru kedi (
[[File:Blabla.jpg|left]]
) RTL vikilerinde sağa hizalanmalıdır (küçük sorun) - OmegaWiki: genel revizyona ihtiyaç var (İfade ve DefinedMeaning sayfaları kullanıcı yönünü izlemelidir) + 23035
- Hataları ara: https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl
Ayrıca bakınız
- Manual:Interface/IDs and classes
- Yerelleştirme
- translatewiki:Project:Better directionality and i18n development (2011 civarında) ve çok daha eski m:BiDi workgroup
- Manual:Hooks/PageContentLanguage
- Visual editor/Bidirectional text requirements
- Extension:RevisionSlider/Developing a RTL-accessible feature in MediaWiki - what we've learned while creating the RevisionSlider
- Quick Intro: Unicode Bidirectional Algorithm by User:MSchottlender-WMF
- rtl.wtf - çevrimiçi sağdan sola nasıl destekleneceğine dair maddeler ve örnekler