Utiliser la touche d'accès n pour naviguer au sein de la page. Sauter au début du contenu.

Ce document est une traduction. En cas de divergences ou d'erreurs, la dernière version originale en anglais fait autorité. Comme indiqué ci-dessous, les droits d'auteur reviennent au W3C.

Traducteur: French Translation Team, Trusted Translations, Inc.

s_gotoW3cHome Internationalisation
 

Perte d'espace bidi

Public visé : utilisateurs, codeurs XHTML/HTML (utilisant des éditeurs ou des langages de script), développeurs script (PHP, JSP, etc.), codeurs CSS, développeurs schéma (DTDs, XML Schema, RelaxNG, etc.), développeurs XSLT, chefs de projet Web et toutes les personnes qui sont novices en internationalisation, ont besoin de directives à considérer sur le sujet et de méthodes pour entrer en la matière sur le site.

Question

Pourquoi mon navigateur élimine-t-il des espaces entre les textes en latin en arabe/hébreu ?

Contexte

Il est possible que les espaces entre les textes en latin et en arabe/hébreu disparaissent si le texte est suivi par des blancs dans l'élément inline qui comprend un attribut dir.

Par exemple, dans ces navigateurs le code :

<p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

Générera un résultat qui apparaîtra comme suit, où la flèche indique l'endroit où il manque un espace :

Image du résultat n'affichant aucun espace à gauche du texte en latin.

Remarquez que cela se produit aussi lorsqu'un texte se lisant de droite à gauche est inséré dans un passage de gauche à droite.

Réponse

Si la précédente partie décrit la présentation de votre code, la solution est de supprimer tous les espaces avant le tag final de l'élément inline ou de supprimer l'attribut dir (le cas échéant).

Par exemple, supprimer l'espace entre (W3C) et </span> :

<p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

produira un résultat qui se présente ainsi :

Image du résultat qui affiche des espaces des deux côtes du texte en latin.

Remarquez aussi que dans cet exemple l'attribut dir="ltr" dans l'élément <span> autour du texte (W3C) n'est en fait pas nécessaire pour produire la bonne disposition. Omettre l'attribut ou l'élément complet span résoudra aussi le problème.

Comme cela m'apparaît-il ?

Les boîtes suivantes montrent des exemples de code suivis par une implémentation de ce code sur cette page, de façon à ce que vous puissiez tester le comportement de votre agent utilisateur actuel.

Code : <p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code : <p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code : <p dir="rtl"> العالمية <span>(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code : <p dir="rtl"> العالمية <span>(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code : <p dir="rtl"> العالمية (W3C) تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

En passant

Lisez uniquement cette section si vous souhaitez obtenir des détails plus précis à propos des raisons pour lesquelles cela se produit.

Le comportement espéré lorsque le texte est affiché n'est pas décrit en détails dans les spécifications XHTML/HTML, mais est décrit dans les spécifications CSS récentes. Bien que les exemples de cette page n'utilisent pas le CSS, les mêmes principes s'appliquent. Ce qui suit est tiré du document de travail en CSS 2.1 :

  1. Si le blanc est réglé sur 'normal', 'nowrap' ou 'pre-line',
    1. chaque tabulation (U+0009) est convertie en un espace (U+0020)
    2. tout espace (U+0020) suivi d'un autre espace (U+0020) - même un espace avant l'inline, si cet espace dispose aussi d'un 'blanc' réglé sur 'normal', 'nowrap' ou 'pre-line' — est supprimé.

En supposant un scénario comme suit (où les couleurs représentent les espaces, U+0020, pour une identification simplifiée) :

<ltr>A <rtl> B </rtl> C</ltr>

la spécification dit que l'espace après A est conservé, l'espace avant B est supprimé, l'espace après B est conservé, l'espace avant C est supprimé. C'est ensuite restitué conformément à l'algorithme bidirectionnel Unicode et le résultat final est :

A  BC

Remarquez qu'il y a deux espaces entre A et B ! Les niveaux d'incorporation peuvent être exprimés comme suit :

11221

Donnez-nous votre avis (en anglais).

Abonnez-vous au flux RSS.

Nouvelles publications

Les nouvelles de la page d'accueil

Twitter (Les nouvelles de la page d'accueil)

‎@webi18n

Pour approfondir

Par : Richard Ishida, W3C. Traducteur : French Translation Team, Trusted Translations, Inc..

XHTML 1.0 valide !
CSS valide !
Codé en UTF-8 !

Traduit d’un contenu en anglais daté du 2003-11-06. Dernière modification de cette traduction le 2009-08-18 17:46 GMT.

Pour un résumé des changements importants, recherchez qa-bidi-space dans le blog i18n.