Directionality support/fr

La prise en charge des différentes directions d' (de gauche à droite, de droite à gauche) est un aspect important pour les logiciels multilingues. Depuis, la prise en charge a été considérablement améliorée.

Cette page donne quelques informations importantes, et des règles pour les développeurs et les administrateurs de wiki pour rendre une fonctionalité ou une extension compatible avec l'interface de droite à gauche et les différentes directionalités 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 developpeurs :


 * 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 dans une direction différente de celle habituellement utilisée par le site.
 * Lorsque vous saisissez une section dans une langue qui a une direction différente de celle du site, ajoutez une balise  avec la langue concernée et les attributs   et  . Par exemple, lorsque vous saisissez une section en anglais dans la wikipedia arabe, entrez   au début et  à la fin.
 * Si vous ne saisissez que quelques mots dans un paragraphe, incluez-les dans une balise avec les attributs lang et dir correspondants. (Beaucoup de wikis possèdent un modèle pour cela, tel que  ).
 * Pour séparer les nombres accolés à un mot pour des directionalités différentes, utilisez la chaîne RLM ou LRM. Beaucoup de wikis possèdent des modèles pour cela, par exemple dans la Wikipedia en hébreu,  dans la Wikipedia arabe,  dans la Wikipedia 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 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épende réellement de la langue du contenu.


 * Attention: lorsque vous utilisez le mode debogue du ResourceLoader, le CSS peut être affiché de manière incohérente comparé au mode production. Comme contournement temporaire, testez l'interface RTL en mode debug off (suivi tâche T29025.)

Quels types de langue ?

 * $wgLang - langue de l'utilisateur (et la direction correcpondante)


 * $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 extension via l'accroche PageContentLanguage
 * Ceci positionne la table des matières (et d'autres choses telles que la grammaire, bien que pas prépondérantes dans la plupart des cas) pour cette langue. Pour ne faire que cela, utilisez


 * 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 retourne $wgLang dans la version 1.18 et plus récentes, et $wgContLang dans la version 1.17 (par défaut).

Elé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 (le 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 actuel du diff est dans la langue du contenu de la page.

Que dois-je ajouter dans le code source ?

 * Tout, sur les pages spéciales, qui est différent de la langue de l'utilisateur doit avoir une balise.
 * Par exemple: SpecialRecentchanges->setTopText qui ajoute le message « recentchangestext » dans la langue du contenu wiki.


 * Anything on custom namespaces that contains text different from the default wiki content should also have a div tag.


 * When the diff text is not the same as the page content language, use  where $diff is a DifferenceEngine object.

Attributs lang/dir
Vous devez utiliser le HTML : but sometimes that is difficult in dynamically generated elements and you can fall back on CSS:

Wiki content
You can use  and   classes to make use of edit section links and ul/ol elements based on that direction.


 * E.g.

This is of course used for the page content of articles.


 * On file pages, it is only added around the actual text while the rest of the file page is custom UI (file history, ...).


 * On category pages it is added as on regular pages, but the text in the user language is embedded in a div with lang & dir attributes according to the user language.


 * On special pages it is not added because these are largely in the user language. A piece of text on special pages can be in the content language, which should then be embedded in these classes. It is for example used in the CodeReview extension for the code summary and code comments, which can contain ul/ol elements (* and # wikitext) in the wiki content language and in principle not the user language obviously.

Adding UI stuff within these classes should not be done. For example, the category links and FlaggedRevs review form are inside #bodyContent but outside .mw-content-ltr/rtl.

A new feature is that these classes can be used within these classes. For example, .mw-content-rtl can be used in an LTR (mw-content-ltr) article. This is useful for multilingual pages. Prior to this, local MediaWiki:Common.css hacks had to be used to make e.g. bullet lists show correctly in  text. You should therefore use  instead of  when editing wiki pages.

See also Manual:Interface/IDs and classes.

Classes du corps
The body tag has an ltr or rtl class by default, which follows the user language. You shouldn't use that, because CSS is automatically flipped based on the user language. The body tag also features a new (1.18) sitedir-ltr and sitedir-rtl class which follows $wgContLang->getDir. If there is need for it, a "userlang-ltr/rtl" and/or "pagelang-ltr/rtl" could be added as well.

alignement float/text
You can use $wgLang->alignStart, $wgContLang->alignStart</tt>, $wgLang->alignEnd</tt>, $wgContLang->alignEnd</tt> which gives the appropriate 'right' or 'left' values.

You can use CSS float</tt> or text-align</tt> of which the value (left/right) is flipped for RTL interface languages.

Exemples
Special:AllMessages is a special page, which means it follows the user language direction. However, the actual messages should follow the direction of the selected language. The cells in the table containing the content of the messages, have a lang & dir attribute.
 * Special:Allmessages = English, LTR
 * Special:Allmessages/he = Hebrew, RTL

The Translate extension, making use of the PageContentLanguage hook, sets the right language (and consequently direction) for translated pages, see e.g. Wikimedia_maintenance_notice/ar which benefits from the mw-content-rtl class on an LTR wiki.

Local wikis
MediaWiki:Common.css pages and relatives are also flipped. This means that you have to add @noflip where needed.

See T33923: site CSS should not be flipped by default

Problèmes

 * Most major features and extensions have improved support since about 1.19, see translatewiki:Project:Better directionality and i18n development for that.
 * Known remaining issues:
 * External link icons are flipped according to user language direction (minor issue)
 * LiquidThreads: Use contlang instead of pagelang, otherwise special page returns userlang
 * WikiLove: kittens aligned left ( Blabla.jpg ) should be aligned right in RTL wikis (minor issue)
 * OmegaWiki: needs general overhaul (Expression and DefinedMeaning pages should follow user direction) + 23035
 * Search bugs: https://bugzilla.wikimedia.org/buglist.cgi?quicksearch=rtl

Voir aussi

 * Better directionality support (2011 presentation slides)
 * Manual:Interface/IDs and classes
 * Localisation
 * translatewiki:Project:Better directionality and i18n development (around 2011) and the much older BiDi workgroup
 * Manual:Hooks/PageContentLanguage
 * Manual:$wgBetterDirectionality
 * Visual editor/Bidirectional text requirements
 * Extension:RevisionSlider/Developing a RTL-accessible feature in MediaWiki - what we've learned while creating the RevisionSlider
 * rtl.wtf, articles and examples about how to support right-to-left online