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

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

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

s_gotoW3cHome Internationalization
 

Использование Управляющих символов Unicode для bidi текста

Предполагаемая аудитория: авторы контента для языков которые основаны на HTML или XML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), и каждый, кому интересно как достичь надлежащего выравнивания текста для скриптов, которые выравниваются справа налево в случае , когда отсутствует необходимая разметка.

Вопрос

Что можно сделать, когда вы не можете использовать разметку для правильного составления двунаправленного текста?

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

Весь текст должен храниться в 'логическом порядке', то есть символы в памяти обрабатываются в одном направлении на основе произношения. Однако, даже если текст отображается в одной строке, символы, используемые в скриптах, которые выравниваются справа налево, например Арабский, Иврит, Тана, Урду и других, должны выравниваться справа налево, в то время как символы в таких скриптах, как Латинский и любых цифрах будут выравниваться слева направо. Для достижения этой визуального изменения порядка используется двунаправленный (bidi) алгоритм Unicode.

Алгоритм bidi влияет на направление текста с учетом направления каждого символа. Однако, иногда, когда скрипты смешанные - алгоритму нужно немного помочь для того, чтобы определить как должны быть расположены части текста при отображении. Например:

Мы показываем примеры используя скрипты с выравниванием текста справа налево, но в случае, когда ваше клиентское приложение не поддерживает должным образом скрипты с выравниванием текста справа налево, то если визуальный результат имеет важное значение мы используем графику. Нажимая на Смотрите код. рисунок, вы открываете текстовую версию в новом окне. (Это также позволяет вам исследовать исходный текст.) Мы также сразу же после этого показываем только ASCII версию, что показывает, Английский текст в нижнем регистре и Иврит или Арабский в верхнем регистре. Составление и размещение символов в ASCII версии отражает оригинальный текст.

Этот пример показывает, что вы получите, если будете полагатся только на двунаправленный алгоритм. Это неправильно. Потому что все цитаты написанные на Иврите, текст "W3C" и запятая должны появиться с левой стороны (то есть в конце) текста на Иврите.

Смотрите код.Incorrectly nested phrases.

ASCII версия:
заголовок "YTIVITCA NOITAZILANOITANRETNI, w3c" на Иврите.

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

Смотрите код.Correctly nested phrases.

ASCII версия:
заголовок "w3c ,YTIVITCA NOITAZILANOITANRETNI" на Иврите.

В других случаях вам может понадобиться переопределить (то есть отключить) действие двунаправленного алгоритму в целом.

Обычно вы будете использовать разметку чтобы это контролировать, но в некоторых случаях (надеемся что в основном в старой разметке, где потребность в поддержке bidi не была полностью продумана) разметка отсутствует. В этой статье рассматривается, как можно использовать управляющие символы Unicode для таких случаев.

Дополнительные сведения о том, как работает bidi алгоритм и где он нуждается в помощи, читайте Что нужно знать об алгоритме bidi и встроенной разметке.

Ответ

Варианты использования

Важно начать с того, что для тех кто разрабатывает контент есть некоторые преимущества использования разметки (при ее наличии) для управления двунаправленным (bidi) направлением текста, а не управляющих символов Unicode (смотрите Управляющие символы Unicode или разметка для поддержки bidi).Если вы разрабатываете или выполняете обновление схемы или спецификации, то вы действительно должны применить разметку для контроля над поведением bidi, а не полагаться на управляющие символы Unicode, и избегайте создания текстов, где не может использоваться разметка (например, текст написанный обычным языком в значениях атрибутов). Дополнительную информацию смотрите Лучшие Практики для Интернационализации XML.

Однако, управляющие символы Unicode могут пригодиться в ситуациях где отсутствует разметка. Примеры включают такую ​​устаревшую разметку, как HTML элемент title и любое значение атрибута HTML, содержащее текст написанный обычным языком.

Если применены управляющие символы Unicode, то они должны использоваться только для встроенного контроля. Управление символами Bidi, охватывающие пункты или элементы списка и т.д., не очень хорошо работают для разметки блочного уровня через способ обработки пробелов в исходном тексте, и через требование управления наследования и обзор по иерархии разметки.

Парные управляющие символы

Unicode предоставляет специальные, невидимые коды форматирования для установки базового направления или для переопределения двунаправленного алгоритма в простом тексте. К ним относятся:

Эти символы используются в паре. Один из первых четырех знаков, что упоминались выше, используется для обозначения начала диапазона текста; в каждом конкретном случае диапазон заканчивается последним (PDF) символом.

Вложенные управляющие символы назначают базовое направление текста, который они окружают. Переопределяющие символы вообще отключают bidi алгоритм для текста, который они окружают.

Если вы не понимаете, когда важно установить базовое направление, читайте Что нужно знать об алгоритме bidi и встроенной разметке.

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

Ниже показана подсказка в HTML, которая включает в себя название документа связанное с ней, плюс некоторый текст с указанием языка конечного документа. Обратите внимание, как текст '(FAQ)' появляется справа от Персидского текста. Это неправильно.

Смотрите код.A tooltip without control characters.

ASCII версия:
'SNOITSEUQ DEKSA YLTNEUQERF (faq)' [На Персидском языке].

Правильный заголовок содержит текст '(FAQ)' справа от Персидского текста, как здесь показано.

Смотрите код.A tooltip with control characters.

ASCII версия:
'(faq) SNOITSEUQ DEKSA YLTNEUQERF' [На Персидском языке].

Для достижения правильного эффекта мы добавили два невидимых управляющих символа, U+202B, RIGHT-TO-LEFT EMBEDDING (RLE), и U+202C, POP DIRECTIONAL FORMATTING (PDF), что представленные числовыми символами в нижеприведенном коде:

title="'‫...‬' [На Персидском языке]"

(Для сравнения этого с тем, как достичь того же результата, если есть разметка, смотрите ниже в разделе под названием Соответствие.)

RLM и LRM символы

Два другие невидимые направляющие управляющие символы, предоставляемые Unicode обычно не имеют соответствующей разметки и должны использоваться либо в форме символов или в экранированной форме. Они менее проблематичны, поскольку они используются самостоятельно, то есть они не используются в парах как другие управляющие символы которые мы обсуждали для того чтобы разграничить диапазоны текста. Также, вероятно, их использование гораздо более распространено, чем использование символов управления, описанных выше.

Например, на приведенном ниже рисунке показано, что вы, вероятно, увидите, когда будете полагаться только на двунаправленный алгоритм для отображения MAC адреса в контенте, который выравнивается справа налево.

Смотрите код.неправильно упорядоченный MAC адрес.

Следующий рисунок показывает ожидаемый результат.

Смотрите код.неправильно упорядоченный MAC адрес.

Для достижения правильного эффекта мы просто добавили два невидимых управляющих символа, U+200E, LEFT-TO-RIGHT MARK (RLM) непосредственно перед началом номера.

(Мы могли бы добиться того же результата, используя контекстные коды, которые упоминались ранее, но это проще и рекомендовано стандартом Unicode.)

Дополнительные сведения о том, как использовать эти два символа, читайте Что нужно знать об алгоритме bidi и встроенной разметке.

Кстати говоря

Соответствие

Там где есть и может быть использована направленая ​​разметка, эти управляющие коды должны быть эквивалентными разметке в поведении. Следующая таблица (взята из Unicode в XML и других языках разметки) дает соответствующую разметку, чтобы заменить каждый набор кодов в HTML.

Символ Код Эквивалентна разметка Комментарий
LRE U+202A dir = "ltr" атрибут блока или встроенного элемента
RLE U+202B dir = "rtl" атрибут блока или встроенного элемента
LRO U+202D <bdo dir = "ltr">  
RLO U+202E <bdo dir = "rtl">  
PDF U+202C ничего когда использован для завершения RLE или LRE (закрытие обеспечивается конечным тегом элемента, содержащим атрибут dir)
</bdo> когда использован для завершения RLO или LRO

Использование HTML в контексте, что позволяет использовать разметку, соответствующий подход к подаче текста в примере в разделе выше "Парные управляющие символы", будет закодировано как:

Смотрите '<a dir="rtl" lang="fa" href="...">...</a>' [На Персидском языке].

Это дало бы такой результат:

Смотрите код.Correctly ordered text.

В XML вы должны были бы использовать bidi разметку предусмотренную в DTD или Схеме, и применять непосредственно используя CSS.

Обратите внимание как разметка, используемая для поддержки атрибута dir также используется для поддержания информации о языке. Как правило, в месте, где требуется атрибут dir можно найти разметку. (Информацию о языке нельзя выразить с помощью управляющих символов.)

Обратите внимание, что существенной разницей между разметкой и управляющими кодами является то, что один атрибут dir можно применить к целой странице или разделу страницы, там где в конце пункта заканчивается эффект LRE/RLE.

Выскажите своё мнение (по-английски).

Подпишитесь на ленту новостей RSS.

Новые публикации

Новости главной страницы

Twitter (Новости главной страницы)

‎@webi18n

Дополнительные материалы

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

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

Перевод с английского: 2009-07-10. Последнее внесение изменений в перевод: 2011-09-26 12:00 GMT

Для просмотра истории внесения изменений нажмите qa-bidi-unicode-controls в блоге i18n.