Ondersteuning leesrichtingen
Ondersteuning voor verschillende schrijf richtingen (lins-naar-rechts, rechts-naar-links) is een belangrijk aspect bij meertalige software. De ondersteuning is vanaf MediaWiki 1.18 aanmerkelijk verbeterd.
Deze pagina geeft wat relevante informatie en richtlijnen voor ontwikkelaars en wiki-beheerders als die een functie of extensie willen maken die compatibel is met de rechts-naar-links interface of met verschillende richtingen in het algemeen.
Gebruikersniveau tips
Eerst wat enkele algemene tips voor gebruikers voordat we op de details voor de ontwikkelaars ingaan.
- De meeste browsers ondersteunen het wijzigen van de richting van een platte tekstbewerkingsgebied, zoals een artikel zoekbox, wiki syntaxis bewerking, bewerkingssamenvatting, enz. Afhankelijk van browsers en besturingssystemen wordt dit gedaan met Ctrl+⇧ Shift (Chrome en IE op Windows), Ctrl+⇧ Shift+X (Firefox), Option-Click-Change richting (Mac). Hiermee zou u moeten kunnen tikken in een richting die afwijkt van de normale richting op die website.
- Bij het invoeren in een taal die een richting heeft die anders dan die van de website, voeg een div tag toe met de goede lang, dir en class attributen. Voorbeeld: in een Engelse sectie op een Arabische Wikipedia, tik eerst
<div lang="en" dir="ltr" class="mw-content-ltr">
in en aan het eind</div>
. - Als het maar een paar woorden in een alinea zijn, zet ze dan binnen
<span>
tags met de toepasselijke lang en dir attributen. (Veel wiki's hebben hier een sjabloon voor, bijv. {{lang}}). - Om gescheiden getallen van een aanliggend woord met een andere schrijfrichting te scheiden, gebruik RLM of LRM tekens. Veel wiki's hebben hiervoor sjablonen, {{כ}} in de Hebreeuwse Wikipedia, {{RLM}} in de Arabische Wikipedia, {{رچ}} in de Iraanse Wikipedia, enz. Als er een sjabloon beschikbaar is, dan wordt er meestal de voorkeur gegeven om het teken zelf te gebruiken.
U kunt fouten in de afhandeling van RTL melden in Phabricator op elk gerelateerd MediaWiki project met gebruik van de tag RTL.
ResourceLoader
Door ResourceLoader met CSSJanus wordt de CSS automatisch gedraaid naar rechts-naar-links als de gebruikerstaal RTL is. Dit is sinds 1.18 standaard (in eerdere versies was het afhankelijk van de taal van de wiki inhoud). Er is relatief weinig CSS die afhankelijk is van de taal van de inhoud.
- Attentie: bij gebruik van ResourceLoader's debug mode kan de CSS inconsistent worden opgebouwd vergeleken met de productie mode. Test als een tijdelijke oplossing de RTL interface zonder te debuggen. (Opmerking wordt gevolgd met Phabricator:T29025.)
Wat voor een soort talen?
Hoofdartikel: Handleiding:Language
- $wgLang - gebruikerstaal (en de bijbehorende richting)
- $wgContLang - taal van de inhoud (en de bijbehorende richting) -> hier LTR
- Title->getPageLanguage() - taal van de pagina-inhoud (en de bijbehorende richting) -> standaard dezelfde als die van de taal van de inhoud van de website
- Er zijn standaard wat uitzonderingen:
- Het kan in extensies met de hook PageContentLanguage worden gezet
- Dit zet de TOC (inhoudsopgave) en zaken als grammatica (hoewel meestal niet relevant) van die taal. Om alleen dat te doen: gebruik parserOptions->setTargetLanguage()
- In extensies die met 1.17 compatibel moeten blijven, gebruik wfUILang(), er is dan geen compatibiliteit met de versies voor 1.17. Dit retourneert vanaf 1.18 $wgLang, in 1.17 retourneert het $wgContLang (standaardwaarde).
Welke taal of richting moet een soort pagina volgen?
- Speciale pagina's gebruiken standaard de gebruikerstaal.
- Broncode moet Engels zijn (dat is bij CSS/JS pagina's de standaard).
- Pagina's waarbij de vertalingen subpagina's zijn dienen de taal van de vertaling te gebruiken (bijv. "Page" is wgContLang, "Page/nl" is "nl"). Dit is in de MediaWiki namespace de standaard.
- Inputboxen en textareas gebruiken standaard de richting van de inhoud.
- Bij het bekijken van de verschillen (diff) wordt de gebruikerstaal gebruikt, maar de actuele verschiltekst is in de taal van de inhoud van de pagina.
Wat moet ik toevoegen in de broncode?
- Alles op een speciale pagina dat anders is dan de taal van de gebruiker moet een tag
<div dir="..." lang="...">
hebben.- Voorbeeld: SpecialRecentchanges->setTopText() die een "recentchangestext" bericht toevoegt in de taal van de wiki.
- Alles op de custom namespaces dat tekst bevat dat anders is dan de standaard wiki inhoud dient ook een
div
tag te hebben. - Als de verschiltekst niet in de taal is van de pagina, gebruik
$diff->setTextLanguage( 'code' );
waar de $diff een DifferenceEngine object is.
lang/dir attributen
U dient HTML te gebruiken:
Xml::rawElement( 'div', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() );
maar als dat lastig is in dynamisch aangemaakte elementen kunt u terugvallen op CSS:
.class { direction: ltr; }
Wiki inhoud
MediaWiki-versie: | ≥ 1.18 |
U kunt de mw-content-ltr
en mw-content-rtl
classes gebruiken voor de links in het bewerkingsgedeelte en de ul/ol elementen gebaseerd op die richting.
- Bijv.
Xml::rawElement( 'div', array(
'class' => 'mw-content-' . $wgLang->getDir(),
'lang' => $wgLang->getCode(),
'dir' => $wgLang->getDir(),
'Text'
);
Dit wordt natuurlijk gebruikt voor de pagina-inhoud van artikelen.
- Op bestandspagina's wordt het alleen toegevoegde rondom de actuele tekst als de rest van die pagina custom UI is (bestandsgeschiedenis, ...).
- Op categorie-pagina's wordt het toegevoegd als op normale pagina's, maar wordt de tekst in de gebruikerstaal geplaatst in een
div
metlang
endir
attributen die bij die gebruikerstaal horen. - Op speciale pagina's wordt het niet gebruikt omdat die grotendeels in de gebruikerstaal zijn. Een deel van de tekst kan in de taal van de inhoud zijn, dan moet die test ingesloten zijn tussen die classes. Dit wordt bijvoorbeeld in de extensie CodeReview gebruikt voor de samenvatting en de opmerkingen, die kunnen ul/ol elementen bevatten (* en # wikitext) in de taal van de wiki inhoud en in principe niet in de gebruikerstaal.
Het is niet de bedoeling om iets van een UI tussen deze classes in te zetten. De categorie linken en het FlaggedRevs beoordelingsformulier zijn binnen #bodyContent maar buiten .mw-content-ltr/rtl.
Zie ook ID's en classes.
body classes
De tag body heeft standaard een ltr
of rtl
class, afhankelijk van de gebruikerstaal.
U moet dat niet gebruiken omdat CSS automatisch terugkeert naar de gebruikerstaal.
De tag body tag heeft sinds 1.18 de classes sitedir-ltr
en sitedir-rtl
class die $wgContLang->getDir()
volgen.
Als het nodig is kunnen ook "userlang-ltr/rtl" en/of "pagelang-ltr/rtl" worden toegevoegd.
float/text-align
U kunt $wgLang->alignStart()
, $wgContLang->alignStart()
, $wgLang->alignEnd()
, $wgContLang->alignEnd()
gebruiken, dat geeft de toepasselijke 'right' of 'left' waarden.
U kunt CSS float
of text-align
gebruiken waarvoor de waarde (links/rechts) wordt gekeerd bij RTL interface talen.
Voorbeelden
Special:AllMessages is een speciale pagina die de richting van de gebruikerstaal volgt. Bij actuele berichten dient echter de richting van de geselecteerde taal te worden gevolgd.
- Special:Allmessages = Engels, LTR
- Special:Allmessages/he = Hebreeuws, RTL
De cellen in de tabel die de inhoud van de berichten bevatten hebben een lang
en dir
attribuut.
De extensie Translate gebruikt de hook PageContentLanguage, zet de goede taal (en consequent de richting) bij vertaalde pagina's, zie bijv. meta:Wikimedia_maintenance_notice/ar die voordeel heeft van de class mw-content-rtl class op een LTR wiki.
Lokale wiki's
MediaWiki:Common.css pagina's en daaraan gerelateerd worden ook omgekeerd. Dat betekent dat u een @noflip moet toevoegen als dat niet de bedoeling is.
Zie T33923: de CSS van een website zou niet standaard moeten keren.
Aandachtspunten
- De belangrijkste functies en extensies hebben vanaf versie 1.19 hier een verbeterde ondersteuning voor, zie translatewiki:Project:Better directionality and i18n development.
- Resterende punten:
- Externe link iconen worden gekeerd op grond van de gebruikerstaal (klein probleem)
- LiquidThreads - Gebruik
contlang
in plaats vanpagelang
, anders geeft een speciale paginauserlang
terug - WikiLove - kittens links uitgelijnd (
[[File:Blabla.jpg|left]]
) zouden rechts uitgelijnd (aligned right) moeten worden in RTL wiki's (klein probleem) - OmegaWiki: zou flink moeten worden herzien (Expressie en DefinedMeaning pagina's zouden de gebruikersrichting moeten volgen) + 23035
- Fouten zoeken: https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl
Zie ook
- Manual:Interface/IDs and classes/nl
- Localisation/nl
- translatewiki:Project:Better directionality and i18n development (rond 2011) en daarvoor 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 Bidirectioneel algoritme door User:MSchottlender-WMF
- rtl.wtf - artikelen en voorbeelden over hoe online rechts-naar-links wordt ondersteund