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

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

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

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

Керуючі символи Unicode чи розмітка для підтримки bidi

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

Питання

Чи варто вам використовувати керуючі символи Unicode або розмітку, щоб правильно відформатувати bidi текст в (X)HTML або XML контенті?

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

Unicode двонаправлений алгоритм визначає напрям тексту на основі властивостей спрямування кожного символу. Іноді алгоритму потрібно трохи допомогти, щоб визначити спрямування об'єктів у тексті, який змішує Арабські символи або Іврит з ними в інших скриптах. В інших випадках вам може знадобитися перевизначити вплив двонаправленого алгоритму в цілому. Наприклад:

Ми показуємо приклади відображуваного тексту з використанням реальних скриптів, які вирівнюються справа наліво. Ми також показуємо тільки ASCII версію відразу ж після цього, що показує Латинські символи в нижньому регістрі та Іврит або Арабську мову у верхньому регістрі. Хоча ASCII текст є перекладом оригіналу, порядок і положення символів відображає текст оригіналу.

Цей приклад показує, що ви отримаєте, якщо ви будете покладатися виключно на двунаправленний алгоритм. Це неправильно. Тому що вся цитата написана на Івриті, текст "W3C" і кома повинні з'явитися з лівої сторони (тобто після) тексту на Івриті.

Назва на Івриті буде "פעילות הבינאום, W3C".

ASCII версія:
назва на Івриті буде "YTIVITCA NOITAZILANOITANRETNI, w3c".

Правильний результат при відображенні буде виглядати наступним чином:

Назва на Івриті буде "פעילות הבינאום, W3C".

ASCII версія:
Назва на Івриті буде "w3c ,YTIVITCA NOITAZILANOITANRETNI".

Unicode надає спеціальні, невидимі коди форматування для створення або перевизначення результату двонаправленого алгоритму у вигляді простого тексту. До них належать такі:

Ці символи використовуються в парі. Один з перших чотирьох символів, що згадувалися вище, використовується для позначення початку діапазону тексту; в кожному конкретному випадку діапазон закінчується останнім (PDF) символом. Наступний приклад показує, як ці керуючі символи можна використати в звичайному тексті:

Нижче наведено порядок символів в пам'яті, і додає два керуючі символи, які представлені тут як індекси: U+202B, RIGHT-TO-LEFT EMBEDDING (RLE), та U+202C, POP DIRECTIONAL FORMATTING (PDF).

Назва на Івриті буде "RLEפעילות הבינאום, W3CPDF".

ASCII версія:
Назва на Івриті буде "RLEINTERNATIONALIZATION ACTIVITY, w3cPDF".

Це призводить до відображення правильного результату (дивіться вище).

HTML4 стандарт представив розмітку для того, щоб робити точно такі ж ефекти, як і ці символи Unicode.

При використанні XHTML раніше наведений приклад буде закодований так:

Назва на Івриті буде "<span dir="rtl">פעילות הבינאום, W3C</span>" .

ASCII версія:
назва на Івриті буде "<span dir="rtl">INTERNATIONALIZATION ACTIVITY, w3c</span>".

Для простоти, приклади коду показують символи в тому ж порядку, в якому вони зберігаються в пам'яті - а не порядок, в якому вони відображаються в редакторі.

W3C рекомендовано, що мови розмітки, які основані на XML також надають виділену розмітку для управління напрямком. (Дивіться розмітка запропонована Рекомендацією Міжнародного Набору Тегів.)

Питання про те, чи повинні ви використовувати розмітку чи керуючі символи Unicode.

Відповідь

В (X)HTML та XML не використовуйте парні Unicode bidi символи форматування коду, так як там доступна еквівалентна розмітка.

Причини

Коли керуючі символи використовуються у контенті довільного спрямування завжди є ймовірність перекриття або неузгоджених діапазонів - особливо тому, що самі символи не мають видимої форми. Якщо атрибути використовуються, це не є результатом добре сформованої розмітки.

Крім того, за допомогою розмітки набагато легше керувати успадкуванням та ефектами розділення параграфів. Щоб досягти того ж результату при використанні результатів керуючих символів Unicode потрібно зробити набагато більше роботи. Використовуючи тільки керуючі символи Unicode також важко зрозуміти як досягнути таких ефектів, як перевернення стовпців таблиці і вирівнювання тексту справа наліво.

HTML 4 специфікація спеціально застерігає від змішування двох підходів через збільшення ймовірності неправильного вкладення. Вона також рекомендує використання розмітки, оскільки вона "пропонує кращі гарантії структурної цілісності документу і знімає деякі проблеми при редагуванні двунаправленного HTML тексту в простому текстовому редакторі". Вона не забороняє використання Unicode bidi кодів форматування.

Спільний Технічний Звіт Unicode #20 та W3C Примітка, Unicode в XML та інших Мовах Розмітки йде далі. Вона явно рекомендує використовувати тільки розмітку. Вона також рекомендує ігнорувати Unicode bidi коди форматування , якщо їх виявлено в контексті браузера, і заміняти їх відповідною розміткою при отриманні в контексті, що редагується.

Відповідність

У наступній таблиці (взято з Unicode в XML та інших Мовах Розмітки) надано відповідну розмітку для заміни кожного коду.

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

Проблемні випадки

Можуть бути місця в HTML або XML файлі, де не можна використовувати розмітку і, таким чином, Unicode символи форматування коду є доцільними.

Це не можливо застосувати розмітку спрямування для значень атрибутів, так що для контролю над напрямком для будь-якого тексту в атрибутах потрібно буде використовувати символи Unicode . Сказавши, що, W3C рекомендує розробникам XML схеми не створювати ситуацій, в яких автори контенту будуть використовувати текст написаний природною мовою у значеннях атрибутів. Може бути застаріла розмітка, однак, такі атрибути як alt в HTML, є там де це неминуче.

Інші ситуації, коли керуючі символи можуть забезпечити тільки перекваліфікацію є елементами, які дозволяють тільки символьний контент або пропускають підтримку атрибутів напряму. Прикладом може служити елемент title (заголовок) в HTML. Знову ж таки, таких ситуацій слід уникати в нових XML форматах. (Вони обмежують не тільки застосування спрямованого тексту, але і застосування мови та іншої мета інформації.)

RLM та LRM символи

Два інші невидимі, але невкладені спрямовані керуючі символи, що надаються Unicode зазвичай не мають відповідної розмітки і повинні бути використані або в символьній, або в екранованій формі. Зверніть увагу, що вони менш проблематичні, оскільки вони використовуються поодинці, не парами, щоб розмежувати діапазони тексту, як і інші керуючі символи, які ми обговорювали.

Доречі

Документ Unicode в XML та інших Мовах Розмітки забезпечує керівництво по використанню широкого діапазону символів Unicode чи розмітки, а не тільки керуючих bidi символів.

Для XML ви повинні були б створити свою власну bidi розмітку в DTD або Схемі і застосовувати спрямування використовуючи CSS.

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

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

Нові джерела

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

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

‎@webi18n

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

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

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

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

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