Прискорююча кнопка n назначена для пропусків при навігації по сторінкам. Пропуск для переходу на початок контента.

Даний документ є перекладом. У випадку будь-яких невідповідностей і помилок остання версія документу англійською мовою повинна розглядатися як офіційна. Першопочаткове авторське право належить W3C, як це вказано нижче.

Перекладач: Alexandr Shlapak (Александр Шлапак)

s_gotoW3cHome Інтернаціоналізація
 

Пропажа пробелов Bidi

Аудиторія: пользователи, шифровальщики XHTML/HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), шифровальщики CSS, разработчики схем (DTDs, XML Schema, RelaxNG, и т.д.), разработчики XSLT, менеджеры веб проектов, и все новички в интернационализации, нуждающиеся в руководстве о том, какие темы рассмотреть и каким способом ознакомиться с материалом на сайте.

Питання

Почему мой браузер не показывает пробелы между Латинским текстом и Арабским/Ивритом?

Ввідна інформація

Пробелы между Латинским и Арабским такстом/Ивритом могут пропадать когда в середине текста за ним следуют белые пробелы - встроенный элемент, включает в себя атрибут dir.

Например, в таких браузерах код:

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

Будет выглядеть следующим образом, где стрелка указывает местонахождение пропавшего пробела:

Изображение результата, который показывает, отсутствие пробела слева от Латинского текста.

Обратите внимание, что этот эффект возникает, когда текст выравнивается справа налево встроенный в отрывок, который выравнивается слева направо .

Відповідь

Если предыдущий раздел описывает только внешний вид вашего кода, то решением этой проблемы будет удалить все пробелы перед конечным тэгом встроенного элемента, или удалить атрибут dir (при необходимости).

Например, для удаления пробела между (W3C) и </span> при использовании:

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

вы получите следующее:

Изображение результата, который показывает, отсутствие пробела слева от Латинского текста.

Отметим также, что в этом примере атрибут dir="ltr" в элементе <span> вокруг текста (W3C) действительности не требует правильного расположения. Если вы пропустите атрибут или весь span элемент это также решит эту проблему.

Как это будет выглядеть?

Следующие окошки показывают примеры кода, за которыми следует выполнение этого кода на этой странице, так что вы можете проверить поведение вашего текущего клиентского приложения.

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

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

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

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

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

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

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

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

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

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

Доречі

Если вы хотите подробнее узнать почему это происходит, то прочтите этот раздел.

Ожидаемым является поведение, когда отображаемый текст не описывается подробно в спецификации XHTML/HTML, но описывается в текущих спецификациях CSS. Хотя примеры на этой странице, не используют CSS, зато в них применяются те же принципы. Следующий текст взят из Рабочего Проекта CSS 2.1:

  1. Если 'white-space' установленное ​​как 'normal', 'nowrap', или 'pre-line',
    1. каждая вкладка (U +0009) превращается в пробел (U+0020)
    2. Удаляется любой пробел (U +0020) за которым следует другой пробел (U +0020) - даже пробел перед встроенным символом, если он также имеет 'white-space' установленное как 'normal', 'nowrap' или 'pre-line'.

Рассмотрим пример, который выглядит следующим образом (цвета представляют пробелы, U +0020, для облегчения идентификации):

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

спецификация говорит о том, что пробел после A сохраняется, пробел перед B удаляется, пробел после B сохраняется, пробел перед C удаляется. Потом это выполняется в соответствии с двунаправленным алгоритмом Unicode, и конечный результат будет таким:

A  BC

Обратите внимание, что есть два пробела между A и B! Вложение уровней может быть выражено следующим образом:

11221

Розкажіть нам про те, що Ви думаєте.

Підписатися на RSS джерело.

Нові джерела

Новини головної сторінки

Twitter (Новини головної сторінки)

‎@webi18n

Додаткові матеріали

Автор: Richard Ishida, W3C. Перекладач: Alexandr Shlapak (Александр Шлапак).

Допустимий XHTML 1.0!
Допустимий CSS!
Кодування UTF-8!

Переклад Англійського контенту від 2003-11-06. Переклад останнього оновлення 2011-10-01 11:00 GMT

Для перегляду історії внесення змін до перекладу натисність qa-bidi-space в блоге i18n.