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

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

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

s_gotoW3cHome Internationalization
 

Пропажа пробелов 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.