Prise en charge du sens d'écriture
La prise en charge des différentes directions d'écriture (de gauche à droite, de droite à gauche) est un aspect important pour les logiciels multilingues. Depuis MediaWiki 1.18 , la prise en charge a été considérablement améliorée.
Cette page donne quelques informations importantes, ainsi que des règles pour les développeurs et les administrateurs de wiki pour rendre une fonctionnalité ou une extension compatible avec l'interface écrite de droite à gauche et les différentes directions d'écriture en général.
Conseils aux utilisateurs
Voici quelques indications générales pour les utilisateurs, avant d'aller plus en détails pour les développeurs :
- La plupart des navigateurs prennent en charge le changement de direction des zones d'édition de texte brut, comme les boîtes de recherche d'articles, la modification de la syntaxe wiki, le résumé des modifications, etc... En fonction des navigateurs et des systèmes d'exploitation, vous pouvez utiliser Ctrl+⇧ Shift (Chrome et Internet Explorer sous Windows), Ctrl+⇧ Shift+X (Firefox), Option-Click-Changer la direction (Mac). Ceci doit vous permettre de saisir du texte dans une direction différente de celle habituellement utilisée par le site.
- Lorsque vous saisissez du texte dans une langue qui a une direction différente de celle du site, ajoutez une balise
div
avec la langue concernée et les attributsdir
etclass
. Par exemple, lorsque vous saisissez du texte en anglais dans la Wikipédia en arabe, tapez<div lang="en" dir="ltr" class="mw-content-ltr">
au début et</div>
à la fin. - Si vous ne saisissez que quelques mots dans un paragraphe, incluez-les dans une balise
<span>
avec les attributslang
etdir
correspondants. (Beaucoup de wikis possèdent un modèle pour cela, tel que {{lang}}). - Pour séparer les nombres accolés à un mot pour des sens d'écriture différents, utilisez la chaîne RLM ou LRM. Beaucoup de wikis possèdent des modèles pour cela, par exemple {{כ}} dans la Wikipédia en hébreu, {{RLM}} dans la Wikipédia arabe, {{رچ}} dans la Wikipédia en persan, etc... Quand un modèle est disponible, il est généralement préférable de l'appeler plutôt que d'utiliser le caractère Unicode lui-même.
Vous pouvez rapporter dans Phabricator les bogues concernant la gestion du RTL pour n'importe quel projet lié à MediaWiki en utilisant la balise RTL.
ResourceLoader
Grâce à ResourceLoader qui inclut CSSJanus, le CSS est automatiquement permuté de droite à gauche quand la langue de l'utilisateur est RTL. C'est le fonctionnement par défaut depuis la version 1.18 (dans les versions précédentes, cela dépendait de la langue du contenu du wiki). Il n'existe que très peu de CSS qui dépendent réellement de la langue du contenu.
- Attention : lorsque vous utilisez le mode debogue du ResourceLoader, le CSS peut s'afficher de manière incohérente comparé au mode production. Comme contournement temporaire, testez l'interface RTL en mode debug off (suivi tâche Phabricator:T29025.)
De quel type de langue parle-t-on ?
Article principal : Manuel:Langue
- $wgLang - langue de l'utilisateur (et la direction correspondante)
- $wgContLang - langue du contenu du site (et la direction correspondante) -> ici LTR
- Titre->getPageLanguage() - langue du contenu de la page (et la direction correspondante) -> par défaut il s'agit de la direction de la langue de contenu du site
- Il existe quelques exceptions par défaut : voir ci-dessous
- Il peut être initialisé par les extensions via le point d'entrée PageContentLanguage
- Ceci positionne la table des matières (et d'autres éléments tels que la grammaire, bien que n'étant pas prépondérants dans la plupart des cas) pour cette langue. Pour ne faire que cela, utilisez
parserOptions->setTargetLanguage()
- Pour les extensions qui doivent rester compatibles avec la version 1.17, vous pouvez utilisez wfUILang(), néanmoins ceci casse la compatibilité avec la version 1.16 et antérieures. Ceci renvoie $wgLang dans les versions 1.18 et plus récentes, mais $wgContLang dans la version 1.17 (par défaut).
Éléments dépendants du type de langue
- Les pages spéciales suivent la langue de l'utilisateur par défaut.
- Le code source doit être en anglais (les pages CSS/JS sont initialisées à 'anglais' par défaut).
- Les pages ayant des sous-pages traduites doivent suivre la langue de traduction (par exemple "Page" vaut wgContLang, "Page/he" vaut "he"). Ceci est le fonctionnement par défaut pour l'espace de noms MediaWiki.
- Les boîtes de saisie et les zones de texte suivent par défaut, la direction du contenu.
- Lorsque vous affichez un diff, il suit la langue de l'utilisateur, mais le texte effectif du diff est affiché dans la langue du contenu de la page.
.
Que dois-je ajouter dans le code source ?
- Sur les pages spéciales, tout ce qui est différent de la langue de l'utilisateur doit avoir une balise
<div dir="..." lang="...">
.- Par exemple : SpecialRecentchanges->setTopText() qui ajoute le message « recentchangestext » dans la langue du contenu wiki.
- Tous ce qui est dans des espaces de noms personnalisés et qui contient du texte différent du contenu wiki par défaut, doit avoir une balise
div
. - Quand le texte du diff n'est pas le même que la langue du contenu de la page, utilisez
$diff->setTextLanguage( 'code' );
là où $diff est un objet DifferenceEngine.
Attributs lang/dir
Vous devriez utiliser le HTML :
Xml::rawElement( 'div', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() );
mais quelques fois ceci est difficile dans les éléments générés dynamiquement et vous pourrez vous replier sur le CSS :
.class { direction: ltr; }
Contenu wiki
Version de MediaWiki : | ≥ 1.18 |
Vous pouvez utiliser les classes mw-content-ltr
et mw-content-rtl
pour utiliser les liens des sections de modification et les éléments ul/ol basés sur cette direction.
- Par exemple :
Xml::rawElement( 'div', array(
'class' => 'mw-content-' . $wgLang->getDir(),
'lang' => $wgLang->getCode(),
'dir' => $wgLang->getDir(),
'Text'
);
Ceci est bien sûr utilisé pour le contenu des pages d'articles.
- Sur les pages de fichiers, il n'est seulement ajouté qu'autour du texte lui-même tandis que le reste de la page du fichier est de l'IHM personnalisée (historique du fichier, ...).
- Sur les pages de catégorie, il est ajouté de la même façon que sur les pages standard, mais le texte de la langue utilisateur est inclus dans un
div
avec les attributslang
etdir
en fonction de la langue de l'utilisateur. - Sur les pages spéciales, il n'est pas ajouté parce qu'elle sont presque toutes dans la langue de l'utilisateur. Un morceau de texte sur les pages spéciales peut être dans la langue de contenu, qui doit ensuite être embarquée dans la classe. Ceci est utilisé par exemple dans l'extension CodeReview pour le résumé du code et pour les commentaires du code, qui peuvent contenir des éléments ul/ol (wikicode * et #) dans la langue du contenu du wiki et évidemment pas dans la langue de l'utilisateur en principe.
Il ne faut pas ajouter d'éléments d'IHM dans ces classes. Par exemple, les liens de catégorie et le formulaire de vérification FlaggedRevs sont dans #bodyContent mais en dehors de .mw-content-ltr/rtl.
Voir aussi les IDs et les classes.
Classes de body
La balise body
possède une classe ltr
ou rtl
par défaut, correspondant à la langue de l'utilisateur.
Vous ne devriez pas utiliser cela, car le CSS est automatiquement modifié en fonction de la langue utilisateur.
La balise body
implémente aussi les nouvelles (1.18) classes sitedir-ltr
et sitedir-rtl
qui suivent $wgContLang->getDir()
.
Si elle est nécessaire, il est possible d'ajouter également « userlang-ltr/rtl » et/ou « pagelang-ltr/rtl ».
Directives "float" et "text-align"
Vous pouvez utiliser $wgLang->alignStart()
, $wgContLang->alignStart()
, $wgLang->alignEnd()
, $wgContLang->alignEnd()
qui fournit les valeurs 'right' ou 'left' appropriées.
Vous pouvez utiliser le CSS float
ou text-align
qui permute la valeur ("left"/"right"), pour les langues d'interface orientées RTL.
Exemples
Special:AllMessages est une page spéciale, ce qui signifie qu'elle suit la direction de la langue utilisateur. Néanmoins, le message lui-même doit suivre la direction de la langue sélectionnée.
- Special:Allmessages = anglais, LTR
- Special:Allmessages/he = hébreu, RTL
Les cellules de la table hébergeant le contenu des messages ont les attributs lang
et dir
.
L'extension Translate , qui utilise l'accroche PageContentLanguage, initialise la bonne langue (et par conséquent sa direction) pour les pages traduites, voir par exemple meta:Wikimedia_maintenance_notice/ar qui bénéficie de la classe mw-content-rtl sur un wiki LTR.
Wikis locaux
Les pages MediaWiki:Common.css et associées sont également inversées. Cela signifie que vous devez ajouter @noflip là où c'est nécessaire.
Voir T33923 : le CSS des sites ne doit pas être permuté par défaut.
Problèmes
- La plupart des fonctionnalités majeures et des extensions ont amélioré la prise en charge depuis environ la version 1.19, voir translatewiki:Project:Better directionality and i18n development pour cela.
- Problèmes connus restants :
- Les icônes de lien externe sont permutées en fonction de la direction de la langue de l'utilisateur (problème mineur)
- LiquidThreads - Utilisez
contlang
au lieu depagelang
, sinon la page spéciale renvoieuserlang
- WikiLove - des chatons alignés à gauche du fichier (
[[File:Blabla.jpg|left]]
) devraient être alignés à droite dans les wikis RTL (problème mineur) - OmegaWiki : a besoin d'une révision générale (les pages Expression et DefinedMeaning doivent suivre la direction de l'utilisateur) + 23035
- Rechercher les rapports de bogue : https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl
Voir aussi
- Manuel:Interface/ID et classes
- Internationalisation
- translatewiki:Project:Better directionality and i18n development (vers 2011) et beaucoup plus ancien 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
- Introduction à Quick : algorithme bidirectionnel Unicode par User:MSchottlender-WMF
- rtl.wtf - articles et exemples sur la manière de prendre en charge le sens de l'écriture en ligne